ヒープ上で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);
EDIT: を私はヒープ上にそれを持っている必要がありますなぜ?私はいつもネットワークからデータを絶え間なく受信する常時稼動の機能を持っており、場合によってはデータをマップに保存して処理します。マップの使用が終了すると、再び私のプロトコルでそのメッセージを受け取ることはないので、マップは必要ではないが、関数は無限ループ上にあるので範囲外ではないことを知っているネットワークからの読み取り)。だから私はfree
またはdelete
または何かを呼び出すことによって、そのメモリを解放したいと思います。
なぜこれをヒープで行う必要がありますか?なぜスタックしていないのですか? –
@SergeRoussak編集を参照してください。 – user2635088
@ user2635088:ローカルスタック変数(正式には、自動保存期間を持つローカル)は、囲みスコープの終わりで破棄されます。これは関数よりも小さくなります。関数内にスコープを作成するには、 '{}'を使用します。または、すでに行っているように 'map'で' clear() 'を呼び出すだけです。これは重要なリソースを回復します(' sizeof(unordered_map) ')は無視してもかまいません。心配する必要があり、 'clear()'がそれを処理する必要があります)。 –