2016-07-21 23 views
0

は私が構造を持っていると仮定します。クラスのメモリを解放するには?

struct Foo { 
    std::set<int> nodes; 
}; 
Foo foo; 

foonodesにいくつかの要素を挿入した後、私はnodesが保持しているメモリを解放したい、と私はIs std::vector memory freed upon a clear?

からいくつかのインスピレーションを得ることができます

std::set<int>().swap(foo.nodes) 

メモリを適切に解放しますか?

私の質問は、how to free memory from a setとは異なります。 intは組み込み型なので、ポインタとして削除することはできません。ポインタはhow to free memory from a setとみなされます。

ところで、clear()はメモリを解放してはならない。

+3

[メモリからメモリを解放する方法](http://stackoverflow.com/questions/3779138/how-to-free-memory-from-a-set) – Dutow

+0

@Dutow 'set is isポインタのセットではなく、http://stackoverflow.com/questions/3779138/how-to-free-memory-from-a-setと同じように削除することはできません。 – chenzhongpu

+2

'std :: vector'はまったく別のコンテナですが、なぜ' std :: ser'は同じ動作をしていると思いますか? – Slava

答えて

2

foo.nodes.clear();は、setをクリアします。ただし、C++ランタイムはメモリをすぐにオペレーティングシステムに戻すことができないため、メモリ消費量への影響を測定するのは難しいかもしれません。

std::set<int>().swap(foo.nodes);でも同様の結果が得られますが、匿名の一時的なオーバーヘッドが発生します。

+0

@ 'clear'はメモリを解放できません。 – chenzhongpu

+3

@chenzhongpuがあなたに言ったのですか? – Slava

+1

@Bathsheba私はまた、メモリが設定された破壊時に自動的に解放されると付け加えたいと思います。私はそれがOPのために明らかかどうか分からない。 – HolyBlackCat

関連する問題