プライベート会員がいます
std::list<MyClass*> myclass_list;
これは OtherClass の一部です。
コンソール アプリケーションを閉じると、OtherClass の空のデストラクタが呼び出されます。問題は、デストラクタの呼び出し中に - OtherClass 内のいくつかのメソッドが myclass_list を反復処理したい - などです。
for(std::list<MyClass*>::iterator it = myclass_list.begin(); it != myclass_list.end(); ++it) {
// do stuff
}
現在、myclass_list が空であっても (そして、その存続期間中に単一の変数が割り当てられたり追加されたりすることはありません) - for ループは少なくとも 1 回反復されます - 基本的に、存在しない MyClass オブジェクトにアクセスします。
std::list から std::vector に切り替えると、これはすべてなくなります。
- ここにリストされている STL (VS2010) の問題は何ですか? 無効なリストをチェックするにはどうすればよいですか (!= 0 または !vector は機能しません。オーバーロードされた演算子はありません)。
- ベクターは連続メモリを使用し、ループが実行されないため、ベクターでは問題なく動作すると思います。
編集:問題は、現在、デストラクタが呼び出されている無効な Otherclass オブジェクトにアクセスすることにあると思います。Otherclass はグローバル オブジェクトです。
ワークフロー ~OtherClass -> someMemberObject を削除 -> ~someMemberObject -> otherclass->CheckMyClassList(someMemberObject) -> クラッシュ