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

图卢杜

我有一个Stuff类,带有两个函数foo(const和non-const):

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,它什么都不做。

眼睛的树

……constvolatile语义(7.1.6.1)不适用于被破坏的对象。当最派生对象(1.8)的析构函数启动时,它们停止生效。

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

所以不,这是不可能的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章