替换指针数组的元素

Replace element of a pointer array

本文关键字:元素 数组 指针 替换      更新时间:2023-10-16

我有一个指针数组Line* lines[MAX_LINES];。如果我在给定的数组lines[i] = new Line()中替换一个元素,我必须在之前调用delete lines[i]还是它会被称为隐式的?

答案

您必须在替换它之前显式地调用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>并为Line重载operator=,这样:

std::vector<Line> lines;
// ...
lines[i] = Lines(...);

将是有效的调用