删除/删除向量项的最有效/最快的方法

时间:2014-11-09 01:42:11

标签: c++

有多种方法可以删除/删除矢量项。

我有一个指针向量,我需要在类的解构函数中删除所有这些指针。

什么是最有效/最快的方式甚至最安全的方式?

// 1º
std::for_each(vector.begin(), vector.end(), [] (Object * object) {
    delete object;
});

// 2º
for (int i = 0; i < vector.size(); ++i)
{
    delete vector[i];
}

// 3º
for (auto current = vector.begin(); current != vector.end(); ++current){
    delete (* current);
}

1 个答案:

答案 0 :(得分:2)

最安全的方法是使用std::vector<std::unique_ptr<Object>>std::vector<std::shared_ptr<Object>>,具体取决于Object个实例所需的生命周期语义。

无论哪种方式,你都不需要在析构函数中做任何;向量的析构函数将破坏所有智能指针实例。反过来,他们会根据自己的特定语义自动删除Object个实例:unique_ptr会立即删除它们,而shared_ptr会在没有其他shared_ptr时删除它们指向那个对象。

假设您需要存储指针,那么也不太可能存在更快的方式。 (如果你不需要多态性,那么你可以使用std::vector<Object>,它只有一个较少的间接层。)