我有一个Stuff类,带有两个函数foo(常量和非常量):
class Stuff
{
public:
~Stuff() { foo(); }
void foo() const { cout << "const foo" << endl; }
void foo() { cout << "non-const foo" << endl; }
};
这就是我想要做的:
如果东西是const,请在Stuff的析构函数中调用const foo。
如果这些东西不是const,请在Stuff的析构函数中调用non-const foo。
我希望可以像上面那样定义析构函数,但是事实证明,在执行析构函数之前就已经删除了constness(它在构造函数完成后立即被强制执行,所以我也不能在那里设置任何标志) )。为了更加清楚,下面是一个示例:
{ Stuff stuff; }
{ const Stuff cstuff; }
此代码两次打印“ non-const foo”。我希望它打印“ non-const foo”,然后打印“ const foo”。用C ++可以做到吗?
编辑:一些人正在要求更多上下文。在实际代码中,填充基本上是某些数据的句柄。如果以非const方式访问东西,则假定数据已被修改,因此我需要使用foo函数将该信息传达给其他进程(MPI)(在完成对它的修改后->在析构函数中,当我松开手柄)。如果以const方式访问它,我知道我不需要传输任何东西,所以我正在调用non-const foo,它什么都不做。
答案 0 :(得分:18)
[...]
const
和volatile
语义(7.1.6.1)不适用于被破坏的对象。它们在 最派生对象(1.8)的析构函数启动。
N4141中的12.4 / 2 [class.dtor]。
所以不行,这是不可能的。