2012-05-01 58 views
0

可能重複:
Does std::vector.clear() do delete (free memory) on each element?STL容器的Clear()方法調用堆對象的刪除嗎?

我有地圖,其中第二元件是堆分配。

迭代時我應該明確地調用delete還是方法erase()clear()對我這麼做?

這裏是我的析構函數刪除其第二個元素是與new

 ~Event() 
     { 
      auto iter = mapper.begin(); 
      while (iter != mapper.end()) 
      {     
       mapper.erase(iter++); // heap object 
      } 
     } 
+0

「我有一張地圖,其中第二個元素是堆分配的」。可能你的意思是你有一張地圖,其中第二個(值)元素是指針,指向你從堆中分配的東西?如果一個容器的元素有一個指針類型,那麼元素就是指針。任何他們可能指出或不指出的東西都不是容器的一部分,當然也不是它的一個元素。 –

回答

2

您必須在每個new元素上明確調用delete
標準庫容器不擁有分配給指針的動態內存的所有權。

如果您需要自動清理,您應該使用智能指針作爲容器元素。

+0

你是否能夠快速找到這樣的ansewr?書籤可能? – codekiddy

+0

也許他們知道嗎?=) – Uflex

+0

@codekiddy它被稱爲_knowing你的東西_,這是工匠們的工作。 –

1

沒有,也不會被分配。您必須自己撥打delete(或使用智能指針)。

+0

我聽說智能指針與STL容器不兼容,所以我將使用刪除:( – codekiddy

+2

@codekiddy這是舊的'std :: auto_ptr',這很麻煩,新的'std :: shared_ptr'等等都很好。 –