析构函数调用后访问成员变量

时间:2015-03-30 17:26:43

标签: c++ explicit-destructor-call

我有这样的代码:

class Foo {
  public:
    void blub () {}
};
class Test {
  public:
  Foo& foo;
  Test (Foo& f) : foo (f) {}
  void test () {
    this->~Test ();
    foo.blub ();
  }
};

在显式调用析构函数后,我的Test类的所有成员变量都可能无法访问,因此调用foo.blub()无效。如果我将引用存储在局部变量中以避免访问成员变量,那么对foo.blub()的调用是否可以保证有效?编译器是否可以优化局部变量并在析构函数调用后访问成员变量,使其再次无效?

class Foo {
  public:
    void blub () {}
};
class Test {
  public:
  Foo& foo;
  Test (Foo& f) : foo (f) {}
  void test () {
    Foo& f = foo;
    this->~Test ();
    f.blub ();
  }
};

1 个答案:

答案 0 :(得分:2)

您的本地f引用Test以外的对象,只要f test(),{{1}}就会一直存在,所以是的,它会起作用。