为什么析构函数不会被调用返回的对象?

i l*_*low 0 c++

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

Ker*_* SB 5

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

另一方面,静态存储持续时间的对象仅在程序退出时被销毁,并且动态存储持续时间的对象(即用new操作符创建的对象)仅在您的请求中被手动销毁.

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