【发布时间】:2014-09-12 05:26:17
【问题描述】:
我想知道类析构函数和直接删除类对象之间有什么区别。在我看来,它们看起来就像在做同样的事情,那么您如何选择使用哪一个呢?
例如,我正在开发一个需要删除我创建的一些类对象的程序。我有一些像VectorClass *v_temp1 = new VectorClass(v1, size); 这样的类构造函数,在函数结束时,我只使用delete v_temp1 调用将它们删除。它工作得很好,并且对象正在被删除,那么当我可以简单地做到这一点时,为什么我还要麻烦创建一个析构函数呢?
【问题讨论】:
-
delete 也会释放内存。
-
析构函数不会释放该对象的内存。他们只是破坏对象。如果您使用 RAII,通常不需要析构函数。比您的示例更简单的是
VectorClass v_temp1(v1, size);,之后您无需清理。 -
delete运算符用于破坏使用new()获得的动态分配的实例。永远不要直接调用类的析构函数。 -
嗯,这很有道理。谢谢你们,我希望我可以点击评论上的答案检查哈哈!
-
你不选择。如果你是新的,你必须删除它。如果 VectorClass 包含一些新的东西,并且您没有在其析构函数(或其他地方)中删除它们,那么即使您删除了 VectorClass,也会泄漏内存。
标签: c++ class destructor delete-operator