好友內存管理+容器
容器有自動內存管理機制。 使用複製構造函數插入值並刪除值時,將爲每個值調用析構函數。 在讀取了元素的no後,將調用哪個stage desctuctor?
當元素讀取未被擦除時,容器類如何處理內存?
非常感謝
好友內存管理+容器
容器有自動內存管理機制。 使用複製構造函數插入值並刪除值時,將爲每個值調用析構函數。 在讀取了元素的no後,將調用哪個stage desctuctor?
當元素讀取未被擦除時,容器類如何處理內存?
非常感謝
容器沒有內存管理,對象有內存管理。
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
很好的解釋。謝謝 – ronan 2010-07-29 07:11:55
在一個容器中的對象被當你明確地刪除元素,當你的容器超出範圍破壞。
當元素讀取未被擦除時,容器類如何處理內存?
它沒有。沒有內存處理要完成。
創建對象時,必須分配內存,當內存被銷燬時,必須釋放內存。
當您讀取現有元素時,您並未創建或銷燬任何內容,因此容器不需要執行任何操作。
謝謝 因此,當容器超出範圍時,內存得到釋放。或者你申請刪除,即析構函數被調用。 – ronan 2010-07-28 12:04:28
這個問題並不能使目前的形式太大的意義,你能澄清?可能會添加一些代碼並描述正在發生的事情以及您期望發生的事情? – Naveen 2010-07-28 11:45:38
這個問題對我沒有意義。也許有一些示例代碼來展示你的意思會有所幫助。 – 2010-07-28 11:49:35
擊敗了我:) – 2010-07-28 11:49:57