vectorによるメモリリーク

yamagenii 791views 更新:2017年3月30日

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

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


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

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

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


std::vectorのメモリ解放

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません