【发布时间】:2015-03-30 17:26:43
【问题描述】:
我有这样的代码:
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 ();
}
};
【问题讨论】:
-
绑定到
f的对象与问题无关。f本身的评估,实际上是this->f,是无效的,因为在您结束*this的生命周期后,this不是有效的Test指针。 -
f是不是this->f。f是 本地 到test()。 -
顺便说一句:你最好不要永远在堆栈上分配
Test的对象并调用test(),否则会繁荣! -
确实如此。我的实例将通过在 char 数组上放置 new 进行分配。
标签: c++ explicit-destructor-call