ページ 11

std::listの要素のdeleteについて

Posted: 2013年7月28日(日) 01:00
by 珈琲
2連チャンで投稿します、
std::listで管理しているオブジェクト要素を、メンバ変数bool Existによって削除したいのですが、メモリ違反が置きます。
他がポインタを持っている状態でdeleteしても大丈夫だと思うのですが、実行時エラーが置きます。

コード:

void CTransientObjectList::LifeCheck(){

	auto it = List.begin();

	while(it != List.end()){  //Listの線形探索
		if(!(*it)->GetExist()){  //ExistがfalseならばdeleteしてListからも削除
			delete ⁢  //delete
			it = List.erase(it);  //リストから外したらそのイテレータを受け取る
			continue;
		}
		it++;
	}
}
参考にしたサイトです
http://marupeke296.com/TIPS_No12_ListElementErase.html

Re: std::listの要素のdeleteについて

Posted: 2013年7月28日(日) 01:33
by h2so5

コード:

            delete ⁢  //delete
このコードだと、オブジェクトではなくイテレータをdeleteしてしまいます。

Re: std::listの要素のdeleteについて

Posted: 2013年7月28日(日) 10:03
by 珈琲
あー、イテレータがそのままオブジェクトのポインタになってるのかと勘違いしてました。
(*it)->GetExist()としてるにもかかわらず。
ありがとうございました!