释放类的实例是否也会释放由其对象/方法动态分配的内存?
Does deallocating an instance of a class also deallocate any memory dynamically allocated by its objects/methods?
例如,尽可能简化:
class thing{
public:
char* arr;
thing();
}
thing::thing{
arr = new char[1000];
}
如果我创建一个动态分配的thing
实例,然后用delete
释放它,由构造函数动态分配的内存也会被释放,还是我必须先释放arr
?
不像写的那样。您将需要声明一个执行delete [] arr;
的析构函数—并且您应该遵循规则三(或者如果添加移动语义则遵循规则五)。
不,您将泄漏分配的数组。当char*
超出作用域时,它不知道它应该是delete
本身-它只是指向该内存。
如果你使用正确的工具来完成正确的任务,例如,将arr
更改为unique_ptr
,那么一旦thing
被释放,它将自动知道释放你分配给它的内存。
相关文章:
- 释放 std::vector 中指针内存的最有效方法是什么?
- 释放分配给大量矢量的内存的最有效方法是什么?
- C++:释放动态数组(结构成员)和指向此结构的指针的方法
- 在崩溃时释放分配的指针的正确方法
- com 释放方法不降至0
- 使用删除与智能指针释放内存以及释放内存的正确方法
- 释放数组的不同方法 - c++
- 有什么方法可以通过删除表达式安全地处理两次释放内存?
- C++ 释放自定义类向量的正确方法
- c++创建新的LinkedList类:Clear()方法指针被释放未分配
- 释放组合结构内存的正确方法
- 调用 std::函数对象,指向释放对象的方法
- 释放方法 C/C++ 中动态分配的 char*
- 使用 std::分配器和 std::move 防止释放的正确方法
- 调用析构函数以释放C++运算符中的内存的正确方法是什么
- 为包含C++对象数组的对象数组释放内存的正确方法
- 为我将在std::map中使用的对象数组分配和释放内存的正确方法
- 将 std::vector 截断<char>为长度 N - 以释放内存的有效方法
- 为什么std::vector没有释放方法
- 从c++方法接收char*,转换为托管字符串,然后释放内存