析构函数和删除

时间:2013-01-15 07:03:22

标签: c++ destructor

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

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

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

然后我致电delete my;

MyClass是否应该使用类似delete MyPtr之类的析构函数?或者,当我打电话给delete my时,MyPtr是否已被销毁?

3 个答案:

答案 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

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