替换指针数组的元素
Replace element of a pointer array
我有一个指针数组Line* lines[MAX_LINES];
。如果我在给定的数组lines[i] = new Line()
中替换一个元素,我必须在之前调用delete lines[i]
还是它会被称为隐式的?
答案
您必须在替换它之前显式地调用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>
并为Line
重载operator=
,这样:
std::vector<Line> lines;
// ...
lines[i] = Lines(...);
将是有效的调用
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀