C ++内存管理:谁负责

时间:2013-07-04 02:50:29

标签: c++ memory-management

假设我正在编写C ++类。该课程包含以下字段:

  • 整数。
  • 一个C ++字符串
  • 动态可调整大小的整数数组和指向它的指针。

在析构函数中,我知道我必须通过调用deletenew我之前所声称的任何内容。在这种情况下,我知道我必须释放我用于int数组的空间。字符串的内存怎么样?我知道我不负责释放它的内存,因为我没有调用new来分配它,但它如何被释放? C ++什么时候调用它的析构函数?

3 个答案:

答案 0 :(得分:2)

一旦实例析构函数完成,就会自动调用成员变量的析构函数。

答案 1 :(得分:2)

  

字符串的内存怎么样?我知道我不负责释放它的内存,因为我没有调用new来分配它,但它如何被释放?

你的类的析构函数隐式调用std::string的析构函数,后者反过来处理释放自己的资源。没什么可担心的。

  

C ++什么时候调用它的析构函数?

当你的类'对象的析构函数被调用时。这意味着当该对象超出范围时,或者deletenew创建它时指向new

我以某种方式理解你的问题。您可能认为new递归new是您班级的成员。不,它没有这样做。除非您的类本身对成员变量delete,否则您需要在其上调用{{1}}。

答案 2 :(得分:1)

当变量超出范围时,回收内存。