以下のコードは、私が動的メモリ管理で書いたゲームのものです。私はゲーム内のすべてのガジェットへのポインタを含む 'all_gadgets'という静的なベクトルを持っています。 実行時にガジェットが削除されると、対応するポインタを静的ベクトルから削除します。 ヌルへのポインタを設定する要素自身のデストラクタ内の静的ベクトル内の要素へのポインタを消去
はオプションではありません任意の提案理由:(上記のコードで
Gadget::~Gadget(){
int i = Gadget::all_gadgets.size();
for (std::vector<Gadget *>::iterator it = Gadget::all_gadgets.begin(); it!=all_gadgets.end(); ++it){
if ((*it)==this){
Gadget::all_gadgets.erase(it);
break;
}
}
int j = (i - Gadget::all_gadgets.size());
if(j!=1)
std::cout << j << " ooops! Gadget not deleted!!" << std::endl;
}
、jがゼロであることが判明するだろう私が使用しています:。?私はこれを試してみましたVC10。このため、侵襲性の二重リンクリストを使用し
'erase'は実際に呼び出されていますか? –
ifの中に勘定書を入れるのはどうですか?そうすれば、実際に内部に到達しているかどうかを確認できます。また、このガジェットが実際にall_gadgetsリスト内にあることは確実ですか? all_gadgets.size()を印刷しようとしましたか? – Agentlien
複数のスレッドが 'vector'にアクセスできますか? 'j'の値は? – hmjd