我有一系列指针Line* lines[MAX_LINES];
。如果我替换给定数组lines[i] = new Line()
中的元素,我是否可以在之前调用delete lines[i]
或将其隐式调用?
答案 0 :(得分:2)
在更换之前,您必须在其上显式调用delete
,以避免内存泄漏。假设数组中的每个Line
都是使用new
动态分配的。
最佳解决方案是简单地将std::vector
或std::array
与智能指针结合使用,例如std::shared_ptr
(对于共享资源)或std::unique_ptr
(对于独占所有权) ):
std::array<std::unique_ptr<Line>, MAX_LINES> lines;
// ...
lines[i] = new Line()
这是通过重载std::unique_ptr::operator=
来完成的,它会在分配新资源之前自动释放资源。
一个更简单的替代方案(也可能更高效,因为你连续存储所有行并且缓存喜欢它)就是简单地使用std::vector<Line>
和重载operator=
来{{1所以:
Line
将是一个有效的电话。