【发布时间】:2012-06-03 16:15:24
【问题描述】:
这是我正在处理的代码:
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
我的问题:
- 在
delete a之后调用m[1]->Log()不抛出异常只是偶然吗? - 清除映射中指向已删除
A实例的所有条目的最佳方法是什么?我的意思是我希望所有m.find(1)、m.find(2)和m.find(3)在删除a后返回m.end()。任何建议都将不胜感激。
【问题讨论】:
-
我已经用一个可能适合您要求的解决方案更新了我的答案。