在一对向量内释放对象的内存
Deallocating memory of object inside a pair of a vector
我想知道如何在一对向量中取消分配对象的内存。
vector< pair<int, object*> > vectorObject;
我确实尝试使用迭代器遍历所有元素,但我不确定如何删除一对中的对象。
for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
// delete?
}
希望有人会好心地提供建议!
'直接的答案是:
for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
delete it->second;
}
但。你可能不应该这样做。
拥有未管理的指针是一个坏主意。您应该更改矢量的类型以使用 std::unique_ptr
。
vector< pair<int, std::unique_ptr<object>>> vectorObject;
这是因为手动删除对象容易出错,除非您采取保护措施(通过 uisng RAII),否则不会异常安全。
只需执行以下操作:
for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
delete it->second;
}
或者取消引用迭代器并删除第二个:
typedef pair<int, object*> mypair;
for (vector< mypair >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
mypair ¤t = *it;
delete current.second;
}
您还可以
在 C++11 中使用基于范围的 for 循环:
for (const auto& pair : vectorObject)
delete pair.second;
既然我们已经在讨论 C++11,你不妨将容器更改为:
std::vector<std::pair<int, std::unique_ptr<object>>> vectorObject;
在 C++11 中,始终更喜欢智能指针来处理对象所有权。
相关文章:
- 迭代时从向量和内存中删除对象
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 对具有动态分配的内存和析构函数的类对象的引用
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 内存清理程序报告全局对象构造中未初始化值的使用
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 准确了解对象在内存中的映射方式
- 完全释放静态对象内存
- C++ 对象内存管理
- 循环中的自动变量和自动对象内存分配
- 每个对象内存分配有多少开销
- 是隐式创建的默认构造函数,负责分配对象内存
- 使用 make_unique 语句重新分配unique_ptr对象 - 内存泄漏
- C++对象内存布局
- C++对象内存消耗
- 谷歌模拟全局模拟对象内存泄漏
- 静态工厂方法和静态对象内存泄漏
- 关于对象内存布局的假设
- 如果我在管理C++对象内存的目标 C 中混合C++代码,ARC 会处理它