だからここに私が扱っているコードがあります:
class A
{
public:
A(){}
virtual ~A(){}
void Log(){printf("Log A\n");}
};
int main(int argc, char**argv)
{
A* a = new A();
a->Log(); // "Log A"
map<int,A*> m;
m[1] = a;
m[2] = a;
m[3] = a;
m[1]->Log(); // "Log A"
delete a;
a = NULL;
m[1]->Log(); // "Log A"
return 0;
}
出力:
ログA
ログA
ログA
私の質問:
m[1]->Log()
呼び出しが後に例外をスローしないのは偶然delete a
ですか?- の削除されたインスタンスを指すマップ内のすべてのエントリを消去するための最良のアプローチは何
A
ですか?つまり、すべてが必要m.find(1)
で、削除した後m.find(2)
にm.find(3)
戻るということです。何かアドバイスをいただければ幸いです。m.end()
a