Tou*_*dou 14 c++ destructor const
我有一个类Stuff,有两个函数foo(const和non-const):
class Stuff
{
public:
~Stuff() { foo(); }
void foo() const { cout << "const foo" << endl; }
void foo() { cout << "non-const foo" << endl; }
};
Run Code Online (Sandbox Code Playgroud)
这是我想要做的:
如果东西是const,请在Stuff的析构函数中调用const foo.
如果东西不是const,则在Stuff的析构函数中调用非const foo.
我希望只是定义如上所示的析构函数是可行的,但事实证明,在执行析构函数之前,constness被删除了(它在构造函数完成后立即强制执行,所以我也不能在那里设置任何标志).为了更清楚,这是一个例子:
{ Stuff stuff; }
{ const Stuff cstuff; }
Run Code Online (Sandbox Code Playgroud)
此代码两次打印"non-const foo".我希望它打印"non-const foo",然后是"const foo".这可能与C++有关吗?
编辑:有些人要求更多背景.在实际代码中,东西基本上是一些数据的句柄.如果以非const方式访问stuff,我假设数据已被修改,所以我需要使用foo函数将其传递给其他进程(MPI)(在我修改它之后 - >在析构函数中,当我释放手柄).如果以const方式访问它,我知道我不需要传输任何东西,所以我调用非const foo,它什么都不做.
Bau*_*gen 18
[...]
const和volatile语义(7.1.6.1)不适用于被破坏的物体.当最派生对象(1.8)的析构函数启动时,它们将停止生效.
N4141中的12.4/2 [class.dtor].
所以不,这是不可能的.
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |