C++内存管理:谁负责

C++ Memory Management: Who is responsible

本文关键字:内存 管理 C++      更新时间:2023-10-16

假设我正在编写一个C++类。该类具有以下字段:

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

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

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

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

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

当调用类的对象的析构函数时。这意味着当该对象超出范围时,或者当new创建该对象时,在指向该对象的指针上调用了delete

不知怎么的,我理解你的问题。您可能认为new递归地new是您类的成员。不,它不是那样做的。除非您的类本身对成员变量执行new,否则您需要对它们调用delete

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

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