3

我有这样的代码:

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 ();
  }
};
4

1 回答 1

2

您的 localf指的是外部的对象,Test并且f会持续存在test(),所以是的,它会起作用。

于 2015-03-30T17:36:54.317 回答