gpt4 book ai didi

带返回的 C++ 析构函数

转载 作者:IT老高 更新时间:2023-10-28 12:29:35 25 4
gpt4 key购买 nike

在 C++ 中,如果我们将类析构函数定义为:

~Foo(){
return;
}

在调用这个析构函数时,Foo 的对象会被销毁还是不会从析构函数显式返回意味着我们不想销毁它。

我想让某个对象仅通过另一个对象析构函数被销毁,即仅当另一个对象准备好被销毁时。

例子:

class Class1{
...
Class2* myClass2;
...
};

Class1::~Class1(){
myClass2->status = FINISHED;
delete myClass2;
}

Class2::~Class2(){
if (status != FINISHED) return;
}

我在网上搜索,似乎找不到我的问题的答案。我也试过自己用调试器逐步检查一些代码,但无法得出结论。

最佳答案

不,您不能通过 return 语句阻止对象被破坏,它只是意味着 dtor 的主体的执行将在该点结束。之后它仍然会被销毁(包括它的成员和基),并且内存仍然会被释放。

你可能会抛出异常。

Class2::~Class2() noexcept(false) {
if (status != FINISHED) throw some_exception();
}

Class1::~Class1() {
myClass2->status = FINISHED;
try {
delete myClass2;
} catch (some_exception& e) {
// what should we do now?
}
}

请注意,这确实是一个可怕的想法。你最好重新考虑设计,我相信一定有更好的。抛出异常并不会阻止其基类和成员的破坏,只是可以得到Class2的dtor的处理结果。能用它做什么还不清楚。

关于带返回的 C++ 析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37273501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com