前提・実現したいこと
ポインタのstd::vectorでerase()した時、イテレータの指しているオブジェクトはメモリから消せるのか知りたいです。
ソースにコメントを入れておきましたが、以下のような状況ではメモリリークしないのでしょうか?
もしするならば、うまい方法を知りたいです。(下記ソースのオブジェクトをdeleteしたい。)
※追記
方法としては、std::vectorまたはstd::listなどを使う、またポインタを使わないという方法は無しの縛りでお願いします。
ソース全文は以下になります。(コンソールアプリケーションを想定。pch.hはウィンドウズ特有のおまじないで特にOS気にしないで大丈夫です。)
該当のソース全文
C++
1#include "pch.h" 2#include <iostream> 3#include <vector> 4 5class Foo 6{ 7public: 8 Foo(){} 9 ~Foo(){} 10}; 11 12std::vector<Foo*> _foos; 13 14int main() 15{ 16 for (int i = 0; i < 100; i++) 17 { 18 Foo* foo = new Foo(); 19 _foos.push_back(foo); 20 } 21 22 std::cout << _foos.size() << std::endl; // 100 23 24 // _foosループ 25 std::vector<Foo*>::iterator it = _foos.begin(); 26 while (it != _foos.end()) 27 { 28 // ここでeraseした場合、itはvectorからは外れるがメモリに残る(リークする)のでは? 29 // itも消したい 30 it = _foos.erase(it); 31 } 32 33 std::cout << _foos.size() << std::endl; // 0 34} 35
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。