我有一个C ++类MyClass
。它包含构造函数,析构函数和int指针private: int *MyPtr;
。
某处,我动态分配了一个MyClass
对象:
MyClass *my = new MyClass(); //...
然后我致电delete my;
MyClass
是否应该使用类似delete MyPtr
之类的析构函数?或者,当我打电话给delete my
时,MyPtr是否已被销毁?
答案 0 :(得分:5)
如果你分配了MyPtr insid MyClass构造函数,那么你有责任删除它。否则,如果删除未分配的内存,则会导致未定义的行为。
一个惯用的方法是在类中使用智能指针,如果你需要动态分配内存并删除它,智能指针会为你调整内存释放。
值得一读:rule of three答案 1 :(得分: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?
始终在析构函数中删除动态分配的内存 - 这就是析构函数的用途。
答案 2 :(得分:0)
致电时
delete my
您不释放该类的数据(除非您在析构函数中指定它),因此这将导致内存泄漏。