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 ();
}
};
答案 0 :(得分:2)
您的本地f
引用Test
以外的对象,只要f
test()
,{{1}}就会一直存在,所以是的,它会起作用。