找出析构函数中对象的常量

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)

这是我想要做的:

  1. 如果东西是const,请在Stuff的析构函数中调用const foo.

  2. 如果东西不是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].

所以不,这是不可能的.