2010-07-28 151 views
-1

好友內存管理+容器

容器有自動內存管理機制。 使用複製構造函數插入值並刪除值時,將爲每個值調用析構函數。 在讀取了元素的no後,將調用哪個stage desctuctor?

當元素讀取未被擦除時,容器類如何處理內存?

非常感謝

+1

這個問題並不能使目前的形式太大的意義,你能澄清?可能會添加一些代碼並描述正在發生的事情以及您期望發生的事情? – Naveen 2010-07-28 11:45:38

+0

這個問題對我沒有意義。也許有一些示例代碼來展示你的意思會有所幫助。 – 2010-07-28 11:49:35

+0

擊敗了我:) – 2010-07-28 11:49:57

回答

1

容器沒有內存管理,對象有內存管理。

obj a; 
{ 
    std::vector<obj> b; 
    b.push_back(a);//copy of 'a' taken here 
}//copy of 'a' in vector destructed here because the copy goes out of scope not specifically the vector 

//'a' still exists 

或者

obj* a = new obj; 
{ 
    std::vector<obj*> b; 
    b.push_back(a); 
    b.push_back(new obj);//pointer of type obj taken here 
}//obj destructor not called 
//got a memory leak as the obj created still exists but has no reference 
delete a;//but can still delete a 
+0

很好的解釋。謝謝 – ronan 2010-07-29 07:11:55

0

在一個容器中的對象被當你明確地刪除元素,當你的容器超出範圍破壞。

2

當元素讀取未被擦除時,容器類如何處理內存?

它沒有。沒有內存處理要完成。

創建對象時,必須分配內存,當內存被銷燬時,必須釋放內存。

當您讀取現有元素時,您並未創建或銷燬任何內容,因此容器不需要執行任何操作。

+0

謝謝 因此,當容器超出範圍時,內存得到釋放。或者你申請刪除,即析構函數被調用。 – ronan 2010-07-28 12:04:28