在堆上聲明std :: unordered_map,在它上執行一些操作,然後釋放它的語法是什麼?我做:std :: unordered_map <int32_t,int32_t>在堆上聲明
std::unordered_map<int32_t, int32_t> *map_temp_last_close = new std::unordered_map<int32_t, int32_t>;
*(map_temp_last_close[val]) = *(int32_t*)(read_buffer + 30); //this happens multiple times in a loop
int32_t some_val = val * (*(map_temp_last_close[val]))
map_temp_last_close->clear();
delete(map_temp_last_close);
編輯: 爲什麼我需要把它在堆上?我有一個始終運行的功能,不斷接收來自網絡的數據,並且在某些情況下,將數據存儲在地圖中以處理它。一旦地圖的使用結束後,我知道我不會再收到我的協議中的消息,因此不需要地圖,但由於該函數處於無限循環中,因此地圖未超出範圍(當從網絡上讀取)。所以我想通過撥打free
或delete
或其他東西來釋放內存。
爲什麼你需要在堆中做這個?爲什麼不在堆棧中? –
@SergeRoussak請參閱編輯。 – user2635088
@ user2635088:本地堆棧變量(形式上,具有自動存儲持續時間的本地化)在封閉範圍的末尾被銷燬,該範圍可以小於函數。使用'{}'在函數內創建一個範圍。或者,只需在'map'上調用'clear()',就可以恢復重要的資源(sizeof(unordered_map)'可以忽略不計,這是相關的堆數據可能足夠大值得關注,並且clear()應該注意這一點)。 –