【发布时间】:2012-06-02 09:51:18
【问题描述】:
我有点困惑何时/如何在 C++ 中从堆中删除对象。
时间:
如果您正在执行一个相对较短的程序,计算一些东西然后将标准输出传递到控制台,是否值得在控制台输出结果后立即销毁所有对象,或者程序会在退出时自动销毁?对于大型程序,我认为当您不再需要任何对象时尝试解决肯定是更好的做法?
如何:
如果我有一个包含指向 MyClass 对象的指针的向量,一旦我完成了向量(和 MyClass 对象),我该如何编写一个可以销毁向量指向的所有 MyClass 对象的析构函数? (显然我也需要销毁向量)。
【问题讨论】:
-
对于您的
How,如果向量本身在堆栈上,则不需要销毁向量本身。要删除内部的每个指针,请遍历并在每个元素上调用 delete。不过,您应该选择智能指针。 -
如果程序在短时间内进行一些计算然后退出,我认为您不必担心释放对象,因为程序持有的每个资源都会在程序被释放后立即释放退出。
-
虽然人们会告诉你,泄漏是可以的,因为短程序养成了分配和删除的习惯。这是个好习惯
-
“这是风格问题……草率的工作往往会形成习惯。” – David Eddings 的 魔法城堡 中的丝绸。
-
我只是想回应拉尔斯曼上面的评论。如果您以需要显式调用 delete(或 delete[])来释放内存的方式进行编程,那么您将遭受大量不必要的痛苦。您花在学习智能指针(尤其是 shared_ptr)和 RAII 编程风格上的时间是一项投资,它将以节省时间的形式获得很多倍的回报,因为您不必跟踪由于过早导致的内存泄漏和/或崩溃释放的对象。养成使用智能指针的习惯,你不会后悔的。
标签: c++