替换指针数组的元素

时间:2015-05-26 07:27:36

标签: c++

我有一系列指针Line* lines[MAX_LINES];。如果我替换给定数组lines[i] = new Line()中的元素,我是否可以在之前调用delete lines[i]或将其隐式调用?

1 个答案:

答案 0 :(得分:2)

答案

在更换之前,您必须在其上显式调用delete,以避免内存泄漏。假设数组中的每个Line都是使用new动态分配的。

替代智能指针

最佳解决方案是简单地将std::vectorstd::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

将是一个有效的电话。