例如,以下泄漏?是不是std:映射析構函數調用關鍵析構函數以及值析構函數?
Foo ()
{
std:map<std:string, int> myMap;
myMap[std::string("Bar")] = 2983;
}
我相信它不會泄漏,但在這一點上找不到具體的文檔。
例如,以下泄漏?是不是std:映射析構函數調用關鍵析構函數以及值析構函數?
Foo ()
{
std:map<std:string, int> myMap;
myMap[std::string("Bar")] = 2983;
}
我相信它不會泄漏,但在這一點上找不到具體的文檔。
是的,地圖析構函數map::~map()
將調用析構函數,以查找其管理的每個鍵和值並釋放內存。
§23.2.1 表96 - 集裝箱需求(續)
(&a)->X() void
the destructor is applied to every element of a; all the memory is deallocated.
元素是'std :: pair'。因此,破壞'std :: pair'會破壞'first'和'second'? – ThomasMcLeod
是的,它就像正常銷燬一對鍵/值,鍵/值的析構函數會相應調用。如果任何鍵/值沒有被銷燬並且內存被釋放,它應該導致資源泄漏。 – billz
是的,它當然可以。這在C++中是非常標準的東西,基本上標準庫和STL中的所有東西都是這樣工作的 - 除非你存儲原始指針,否則始終調用析構函數。
是的,它不破壞兩個鍵和值。 – Sneftel
有關參考資料,請參見C++ 11標準中的[container.requirements.general]第3節。 – Sneftel
// @本,謝謝,段號是多少? – ThomasMcLeod