2

std::unordered_set が取ったメモリを解放する方法を教えてください。

unordered_set::clear() は、メモリを解放せずにセットをクリアすると思います。

unordered_set の保持をローカル関数で解放する必要があります。ローカル関数を呼び出すたびにメモリが消費されるため、ローカル関数の最後でメモリを解放する必要があります。

ありがとうございました

4

3 に答える 3

2

unordered_setスタック上にある場合、必要なメモリを自動的に解放します。

void some_function()
{
    unordered_set<int> set;
    // use the set
} // set memory will be deallocated automatically here
于 2011-11-12T03:34:16.693 に答える
2

のメモリをクリアする通常の方法unordered_setは、標準コンテナの場合と同じです。

set = std::unordered_set<T>()

以下も使用できます。

std::unordered_set<T>().swap(set)

これは、r-value refs の前の数日間、コンテナからメモリを解放する通常の方法でした。

Tセットに含まれるオブジェクトのタイプに置き換える必要があります。

于 2011-11-12T03:12:15.017 に答える
0

セットはノードベースのコンテナであるため、ノードのメモリは実際に適切に解放されます。しかし、ハッシュ テーブルが多くのバケットに成長している可能性があるため、rehash(1)もう一度小さくすることもできますが、これはヒントに過ぎません。バケットの数を減らすためにセットは必要ありません。

于 2011-11-12T03:13:19.467 に答える