解除对象的指针数组?

Lak*_*mie 0 c++ pointers memory-management

考虑以下情况:

Class** array = new Class*[8];
array[1] = new Class(1,2);
Run Code Online (Sandbox Code Playgroud)

只是做" delete[ ] array足够"或者我应该在前者之前加上" delete array[1]".我对内存管理并不完全满意.

jal*_*alf 5

每次调用时new[],都必须调用delete[]指向解除分配的指针.每次打电话new,你都要打电话delete.

在你的情况下,你打new两次电话.array[1]包含指向分配的类的指针new,因此必须将其解除分配delete.并且array是指向分配的数组的指针new[],因此必须将其释放delete[].

当然,你可以通过简单地声明这样的数组来节省你自己的头痛:

Class array[8];
array[1] = Class(1,2);
Run Code Online (Sandbox Code Playgroud)

没有动态内存分配意味着无需调用delete.

或使用std::vector:

std::vector<Class> array(8);
array[1] = Class(1,2);
Run Code Online (Sandbox Code Playgroud)

  • 考虑第一个`new`创建一个包含8个指针的数组.如果系统要自动删除单个指针,它怎么知道*要删除哪些*?您只需将第二个条目(`array [1]`)设置为指向另一个分配.阵列中剩余的7个条目未初始化.运行时如何知道它们中的7个应该*没有*在它们上面调用`delete`,但是应该? (2认同)