[英]Delete a pointer as first key of std::map
我想知道如何正確刪除一個指針,它是std::map
的第一個鍵。 我只能為第二把鑰匙弄清楚。 第一個密鑰僅可讀。
例:
std::map<char*,foo> myMap;
char* str = new char[3];
foo bar;
str[0]='h';
str[1]='i';
str[2]='\0';
myMap[str] = bar
/* some code */
for(auto element: myMap)
{
delete [] element.first;
}
這似乎沒有釋放指針。 std::map
是否在某個地方丟失了指針? 我正在處理大數據,因此我需要盡可能輕的字符串結構。 這就是為什么我使用char*
而不是std::string
(將比較器函子提供給映射)的原因。
編輯
更高的精度:
希望這可以幫助您理解我的問題。
您的代碼已經可以工作了(但也不是異常安全的-可以使用智能指針)。 請注意,當內存為delete
d時,程序通常不會浪費時間來更改它,它只是更改一些空閑/使用中的記錄,以便將來的分配可以考慮將該內存重用,因此,如果嘗試取消引用delete
d指針您有未定義的行為,但它似乎仍然具有舊內容-至少有一段時間。 我認為這就是為什么您認為解除分配不起作用的原因。
您的地圖有兩個元素,您需要刪除第一個元素: it->first
是char*
, it->second
是foo
。 嘗試以下代碼:
for(std::map<char*, foo>::iterator it = myMap.begin(); it!=myMap.end(); it++)
{
delete[] it->first;
myMap.erase(it);
}
希望有幫助!
謝謝大家,您的意見有助於解決我的問題。 我成功使用了std :: string。 我知道,我告訴過你那太重了。 但是我發現了méthod 儲備(size_t n = 0) ,它完全可以容納我們想要的地方。 現在,不再有泄漏。
再次感謝您的回答!
資料來源: http : //www.cplusplus.com/reference/string/string/reserve/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.