2010-10-16 22 views
1

好的,我使用C++ STL容器(目前vector<customType*>)。 現在我需要從容器中刪除元素, ,但使用擦除解構對象,這是壞的,因爲我把它從一個,並將其放到一個變量做一些處理,然後到另一個。從STL容器中移除東西而不解構它

此刻我的代碼非常討厭,我只是在讀完它後將NULL放入它的位置,放入我的變量中,然後繼續添加if(Q [ii] NULL)。 但這並不太好。

回答

3

如果你有指針的容器(這聽起來像你這樣做,因爲你要分配給NULL「刪除」的元素),然後從容器擦除元素不刪除指向的對象。你有責任自己做這件事。

如果您有對象的容器(以及非指針對象),那麼您需要將該元素從容器中複製出來,然後再擦除它。

+0

啊,你說的沒錯。 這是別的東西導致我的錯誤。 謝謝 – 2010-10-16 07:49:58

1

你不能真正從矢量中移除元素而不會破壞它。如果向量存儲指針,則可以將指針移除到該元素,該元素實際上不會銷燬該元素本身。

0

STL容器操作具有複製語義。因此,無論何時添加或刪除元素,構造函數或析構函數都會相應地調用(假設爲非原始類型)。如果矢量在處理過程中被重新調整大小,所有對象都將被複制構建並且原始構件被破壞。沒有辦法避免所有這些複製。

避免開銷的唯一方法是使用(智能)指針而不是對象的向量。

相關問題