gpt4 book ai didi

c++ - 如何在没有删除运算符的情况下为堆对象调用析构函数?

转载 作者:太空狗 更新时间:2023-10-29 20:08:30 24 4
gpt4 key购买 nike

有人可以在这里解释当相应的删除未被调用时,如何通过 new 运算符为在堆中创建的对象调用析构函数。此外,由于在下面的代码中我们通过 const 引用捕获对象,而在析构函数中我们正在更改对象值(即设置 n=0),所以这怎么可能。

class A
{
private:
int n;
public:
A()
{
n=100;
std::cout<<"In constructor..."<<std::endl;
}
~A()
{
n=0;
std::cout<<"In destructor..."<<std::endl;
}
};
int main()
{
try
{
throw *(new A());
}
catch(const A& obj)
{
std::cout<<"Caught...."<<std::endl;
}

return 0;
}

程序输出(在 http://cpp.sh/3jm4x 上运行):

In constructor...Caught....In destructor...

最佳答案

throw 复制对象,然后在 catch 之后自动销毁。你观察到的正是这种破坏。原始的堆分配对象确实从未被销毁。

关于c++ - 如何在没有删除运算符的情况下为堆对象调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53664529/

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