有多种方法可以删除/删除矢量项。
我有一个指针向量,我需要在类的解构函数中删除所有这些指针。
什么是最有效/最快的方式甚至最安全的方式?
// 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);
}
答案 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>
,它只有一个较少的间接层。)