在 C++ 中,如果我们将类析构函数定义为:
~Foo(){
return;
}
调用此析构函数后, Foo
的对象将被销毁,或者从析构函数显式返回是否意味着我们不想销毁它。
我想使某个对象仅通过另一个对象析构函数被销毁,即仅当另一个对象准备好被销毁时。
例子:
class Class1{
...
Class2* myClass2;
...
};
Class1::~Class1(){
myClass2->status = FINISHED;
delete myClass2;
}
Class2::~Class2(){
if (status != FINISHED) return;
}
我在网上搜索,似乎找不到我的问题的答案。我还尝试通过使用调试器逐步完成一些代码来自己弄清楚,但无法得出结论性的结果。
原文由 Rasula 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,您不能通过 return 语句阻止对象被破坏,这只是意味着 dtor 的主体的执行将在该点结束。之后它仍然会被销毁(包括它的成员和基),并且内存仍然会被释放。
你可能会抛出异常。
请注意,这确实是一个 糟糕 的主意。你最好重新考虑设计,我相信一定有更好的。抛出异常不会阻止其基和成员的破坏,只是可以得到
Class2
的 dtor 的处理结果。可以用它做什么仍然不清楚。