【发布时间】:2013-05-10 12:13:39
【问题描述】:
int* ptr = new int();
delete ptr;
ptr = 0; // or null
我的书告诉我,在删除指针指向的内容后将指针设置为 null 或 0 是一种很好的做法。我不明白为什么。有人可以给我一个可能导致问题的场景吗?
【问题讨论】:
-
很多原因。我认为 最强 的原因只是“良好实践”:) 其他原因包括 1)意图清晰,2)易于调试(空指针更容易看到),3)更好的错误处理(空指针会更快崩溃,“初始化的垃圾指针”可能会稍后崩溃)等等等等
-
重要的一点:做它(确保尽可能认真地清空你的指针),但不要依赖它(只是因为指针 isn't null 并不意味着它一定是 valid)。恕我直言...
-
@paulsm4:我认为这是不好的做法。它隐藏的问题多于解决的问题。它还会导致将导致崩溃的问题移至代码中的其他位置(并且仍然崩溃),但现在您很难追踪原始问题。不要这样做。不好的做法。唯一好的做法是确保任何被删除的变量立即离开作用域,因此不会不可用。
-
找另一本书。管理指针需要仔细设计,而不是本地黑客。例如:
int *p = new int; int *q = p; delete p; p = 0;你猜怎么着?if(q)不会在这里救你。