假设我想声明一个指向特定对象的指针数组
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每个对象?或者这在实践中是愚蠢的吗?
你总是以某种方式拥有你所拥有的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可以执行的操作以及如何使用它,请阅读文档.可能最重要的是你:你可以像数组一样索引它.