2014-11-09 123 views
0

删除/删除矢量项有几种方法。删除/删除矢量项的最有效/最快捷的方法

我有一个指针向量,我需要在类的解构器中删除它们。

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

// 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); 
} 
+6

如果你使用智能指针代替,这个“问题”是没有意义的。 – user657267 2014-11-09 01:43:42

+2

哪里递归? – 2014-11-09 01:51:34

+0

这个问题似乎是“迭代遍历向量的最快方法?”的副本。 – 2014-11-09 01:53:41

回答

2

最安全的方式是使用要么取决于你所需要的Object实例寿命语义std::vector<std::unique_ptr<Object>>std::vector<std::shared_ptr<Object>>。无论哪种方式,你都不需要在析构函数中做任何东西;矢量的析构函数将会破坏所有的智能指针实例。反过来,它们会根据它们的特定语义自动删除Object实例:unique_ptr会立即删除它们,而shared_ptr会在其他shared_ptr指向该对象时立即删除它们。

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

相关问题