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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
珈琲

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

#1

投稿記事 by 珈琲 » 12年前

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 12年前

コード:

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

珈琲

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

#3

投稿記事 by 珈琲 » 12年前

あー、イテレータがそのままオブジェクトのポインタになってるのかと勘違いしてました。
(*it)->GetExist()としてるにもかかわらず。
ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る