unordered_setのメモリを解放する方法は?

どのようにメモリを解放するのだろうか?:: unordered_setが取った?

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

私は、ローカル関数によってunordered_set holdを解放する必要があります。私はローカル関数を呼び出すたびにメモリを消費するので、ローカル関数の最後に解放する必要があります。

ありがとうございました

2
追加された 編集された
ビュー: 1
unordered_set は関数のローカルですか?そうであれば、何もする必要なく、関数の最後にメモリが正しく解放されます。
追加された 著者 Mankarse,

3 答え

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

set = std::unordered_set()

また次のものを使用することもできます:

std::unordered_set().swap(set)

r値参照の前の日にコンテナからメモリを解放する通常の方法でした。

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

2
追加された
申し訳ありません...私は例の一部を省きました。テンプレートのパラメータを unordered_set に渡す必要があります(編集を参照)。
追加された 著者 Mankarse,
バッククォートでコードを囲む必要があります: `code`
追加された 著者 Mankarse,
std :: tr1 :: unordered_set >()swap(_closelist);_closelist = stdの両方を実行する必要はありません。 :: tr1 :: unordered_set >(); いずれか単独では問題ありません。あなたは正しいです。これは、メモリをまったく所有していない unordered_set という結果になるとは限りません。これは、デフォルトで構築された unordered_set のメモリ消費量を、初期のメモリ消費量が小さくなるまで減らしています。これは、 unordered_set 多くの要素を含んでいます。
追加された 著者 Mankarse,
私はこれを行うとき:std :: tr1 :: unordered_set :: swap(_closelist);テンプレート ' class std :: tr1 :: unordered_set'をテンプレートパラメータなしで使用していて、_closelist.swap(std :: tr1 :: unordered_set ()); error: '(' token の前にテンプレート引数がありません。
追加された 著者 weeo,
基本的にはセットに新しい空のタイプを割り当てていますか?私は私の記憶が解放されていないと思います.....私は
 std :: tr1 :: unordered_set >()swap(_closelist) ; _closelist = std :: tr1 :: unordered_set >();
追加された 著者 weeo,
あなたのようなコードを入力できないのはなぜですか= = ...
追加された 著者 weeo,
私はこのコードでテストしますが、2.7GBのメモリを使用していますが、2.5GBの code まで自由に使用できます// std :: tr1 :: unordered_set > _closelist; (std :: tr1 :: array test = {9,8,3,7,2,1,6,10,5,13,​​0、 4,12,15,14、i}; _closelist.insert(テスト); } std :: tr1 :: unordered_set >()スワップ(_closelist); printf( "hahahahahahhahahaha \ n \ n \ n \ n \ n \ n \ n"); コード
追加された 著者 weeo,
はい....それは確かにメモリを減らすでしょう。あなたはmallocのようなunordered_setのすべての関数を知っていますか、無料ですべてのメモリを解放することができますか? unordered_setにはmallocを使用できないと思いますか?
追加された 著者 weeo,

unordered_set automatically releases the memory it takes if its on the stack:

void some_function()
{
    unordered_set set;
   //use the set
}//set memory will be deallocated automatically here
1
追加された

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

0
追加された
私は、ローカル関数によってunordered_set holdを解放する必要があります。私はローカル関数を呼び出すたびにメモリを消費するので、ローカル関数の最後に解放する必要があります。
追加された 著者 weeo,