在一对向量内释放对象的内存

Deallocating memory of object inside a pair of a vector

本文关键字:对象 内存 释放 向量      更新时间:2023-10-16

我想知道如何在一对向量中取消分配对象的内存。

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 &current = *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 中,始终更喜欢智能指针来处理对象所有权。