gpt4 book ai didi

c++ - 为什么析构函数不会在您返回的对象上被调用?

转载 作者:太空宇宙 更新时间:2023-11-04 15:07:56 26 4
gpt4 key购买 nike

据我了解,您可以通过返回指向对象的指针来返回 C++ 中的对象。但我的印象是,一旦一个函数运行完毕,就会对所有对象调用析构函数。为什么不在您返回的对象上调用析构函数?

最佳答案

只有那些具有自动存储持续时间的对象的析构函数在这些对象离开它们的作用域时被调用(不仅仅是一个函数,而是任何作用域:大括号,for-statements,甚至是单行表达式)。

另一方面,static 存储持续时间的对象只在程序退出时销毁,动态 存储持续时间的对象(即那些用 new 创建的对象) 运算符)只能根据您的请求手动销毁。

当您以您描述的方式返回一个指针时,几乎可以肯定该指针指向一个动态创建的对象,因此指针的接收者有责任确保该对象最终被清除。这是裸指针的最大缺点:它们不传达任何隐式所有权声明,您必须在代码之外手动提供有关谁负责动态对象的信息。

关于c++ - 为什么析构函数不会在您返回的对象上被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9642429/

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