1

我有一个 C++ 类,MyClass. 它包含一个构造函数、析构函数和一个 int 指针private: int *MyPtr;

在某处,我动态分配一个MyClass对象:

MyClass *my = new MyClass(); //...

然后我打电话delete my;

应该MyClass有一个使用类似的析构函数delete MyPtr?还是我打电话时 MyPtr 被破坏了delete my

4

3 回答 3

5

如果您在 MyClass 构造函数中分配了 MyPtr,那么您有责任将其删除。否则,如果您删除未分配的内存,则会导致未定义的行为。

如果您需要动态分配内存并删除它,一种惯用的方法是在类中使用智能指针,智能指针将为您处理内存释放。

可能值得一读:三法则

于 2013-01-15T07:05:11.567 回答
3

Or is that MyPtr destroyed when I call delete my?

不,当您调用delete my;它时,它将调用析构函数,MyClass除非您在析构函数中显式删除 MyPtr,否则您将发生内存泄漏。

Should MyClass have a destructor which uses something like delete MyPtr?

始终删除析构函数中动态分配的内存——这就是析构函数的用途。

于 2013-01-15T07:04:58.733 回答
0

你打电话时

delete my

您不会释放该类的数据(除非您在析构函数中指定它),因此这将导致内存泄漏。

于 2013-01-15T07:07:52.173 回答