vectorによるメモリリーク

c++ではガベージコレクションが無いので自分でメモリ管理する必要がありますが、クラスのメンバのvectorはかなり厄介でdeleteメソッド、clearメソッドでもデストラクタが呼ばれずメモリリークしていきます。 実際にマイコンでプログラムを動かして放置していると落ちる問題に出くわしました

deleteメソッドだけで管理していたものをclearメソッドに変更しかしそれでも落ちる…


そのときには一時オブジェクトに対してswapすることで解放されるそうです

std::vector<int> vec;
std::vector<int>().swap(vec);

なんじゃこりゃってかんじですが、一時的なオブジェクトはメモリが0でそれと交換することでvecのメモリが解放、一時オブジェクトはすぐに解放されるという仕組みらしいてす


std::vectorのメモリ解放