找出对象在其析构函数中的常数

时间:2018-12-18 20:57:20

标签: c++ const destructor

我有一个Stuff类,带有两个函数foo(常量和非常量):

class Stuff
{
public:
    ~Stuff() { foo(); }

    void foo() const { cout << "const foo" << endl; }
    void foo()       { cout << "non-const foo" << endl; }
};

这就是我想要做的:

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

  2. 如果这些东西不是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,它什么都不做。

1 个答案:

答案 0 :(得分:18)

  

[...] constvolatile   语义(7.1.6.1)不适用于被破坏的对象。它们在   最派生对象(1.8)的析构函数启动。

N4141中的12.4 / 2 [class.dtor]。

所以不行,这是不可能的。