我有一个 C++ 类,MyClass
. 它包含一个构造函数、析构函数和一个 int 指针private: int *MyPtr;
。
在某处,我动态分配一个MyClass
对象:
MyClass *my = new MyClass(); //...
然后我打电话delete my;
应该MyClass
有一个使用类似的析构函数delete MyPtr
?还是我打电话时 MyPtr 被破坏了delete my
?
我有一个 C++ 类,MyClass
. 它包含一个构造函数、析构函数和一个 int 指针private: int *MyPtr;
。
在某处,我动态分配一个MyClass
对象:
MyClass *my = new MyClass(); //...
然后我打电话delete my;
应该MyClass
有一个使用类似的析构函数delete MyPtr
?还是我打电话时 MyPtr 被破坏了delete my
?
如果您在 MyClass 构造函数中分配了 MyPtr,那么您有责任将其删除。否则,如果您删除未分配的内存,则会导致未定义的行为。
如果您需要动态分配内存并删除它,一种惯用的方法是在类中使用智能指针,智能指针将为您处理内存释放。
可能值得一读:三法则
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?
始终删除析构函数中动态分配的内存——这就是析构函数的用途。
你打电话时
delete my
您不会释放该类的数据(除非您在析构函数中指定它),因此这将导致内存泄漏。