销毁指向数组中对象的指针

nov*_*ain 1 c++ arrays

假设我想声明一个指向特定对象的指针数组

Object *objects = new Object[size];
Run Code Online (Sandbox Code Playgroud)

然后将一些新对象添加到我动态分配的数组中

for (int i = 0; i < size; i++){

    Object* obj = new obj;
    objects[i] = *obj;

}
Run Code Online (Sandbox Code Playgroud)

通过调用delete[]数组来释放所有内存是否足够,或者我是否必须首先遍历数组并调用delete每个对象?或者这在实践中是愚蠢的吗?

Bau*_*gen 5

你总是以某种方式拥有你所拥有的delete一切new.这意味着,您需要delete obj在每次迭代中避免泄漏.请注意,您永远不会真正存储Object obj点,而是它的副本.

你所知道的方式是非常不寻常的,而且不是很方便:你展示的循环没有任何用处,因为new Objects[size]已经默认构建你的Objects.特别是,它不添加任何元素,它们已经存在.你可以把它留下来.如果你想改变你的数组的内容,例如做更多的初始化,你的循环通常看起来更像这样

for (int i = 0; i < size; i++){
    objects[i] = newValue;    
}
Run Code Online (Sandbox Code Playgroud)

记住,Objects已经存在了new Objects[size]!

在实践中,你会与更好

std::vector<Object> objects(size);
Run Code Online (Sandbox Code Playgroud)

(或者,如果以上不适合您的用例,a

std::vector<std::unique_ptr<Object>> objects(size);
Run Code Online (Sandbox Code Playgroud)

,但我觉得这不太可能是这种情况).要详细了解std::vector可以执行的操作以及如何使用它,请阅读文档.可能最重要的是你:你可以像数组一样索引它.