2014-11-09 67 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>,它具有少一個間接級別。)

相關問題