释放类的实例是否也会释放由其对象/方法动态分配的内存?

Does deallocating an instance of a class also deallocate any memory dynamically allocated by its objects/methods?

本文关键字:释放 方法 内存 对象 动态分配 实例 是否      更新时间:2023-10-16

例如,尽可能简化:

class thing{
    public:
        char* arr;
        thing();
}
thing::thing{
    arr = new char[1000];
}

如果我创建一个动态分配的thing实例,然后用delete释放它,由构造函数动态分配的内存也会被释放,还是我必须先释放arr ?

不像写的那样。您将需要声明一个执行delete [] arr;的析构函数—并且您应该遵循规则三(或者如果添加移动语义则遵循规则五)。

不,您将泄漏分配的数组。当char*超出作用域时,它不知道它应该是delete本身-它只是指向该内存。

如果你使用正确的工具来完成正确的任务,例如,将arr更改为unique_ptr,那么一旦thing被释放,它将自动知道释放你分配给它的内存。