C/C++

【C++】vectorの解放

更新日:

スポンサードリンク

C++STLにあるvectorは配列の要素数がわからない場合などに非常に便利ですがメモリ関係で面倒だったりします。関数内などに宣言して使用したvectorはそこを抜ければ勝手にメモリ解放を行ってくれるようなのですが、クラスのメンバなどに宣言したものなどは(デストラクタを呼ばない限り)メモリは解放されないようです。

たとえばvectorを使い終わった後に一旦clearを行っても要素数は変化しますがメモリ自体は解放されないままになっています。面倒です。小規模なものなら問題ないかもしれませんが、それなりに大きい構造体のデータとかが大量に解放されないとなるとこれは大問題です。

そこで用いられるのがswap技法と呼ばれる手法です。vectorのメソッドであるswapを用いて一時オブジェクトと交換してやることでデストラクタを半ば強制的に動かしてやろうというものらしいです。

例)

std::vector<int> vec;
~
std::vector<int>().swap(vec);   //←swap技法による解放
スポンサードリンク

-C/C++

Copyright© めめんと , 2019 All Rights Reserved Powered by AFFINGER5.