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

Access member variables after destructor call

我有这样的代码:

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

显式调用析构函数后,我的Testclass的所有成员变量很可能都无法访问,所以调用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 ();
  }
};

您的本地 f 指的是 Test 之外的对象,只要 test() 存在,f 就会持续存在,所以是的,它会起作用。