为什么C++的delete运算符不会将指针设置为NULL?

4

与此问题完全相同:为什么delete操作不会将指针设置为NULL? - James McNellis
另请参见https://dev59.com/MXI-5IYBdhLWcg3wSGQB。 - Mark Ransom
3个回答

6

C ++会完全按照您告诉它要做的事情去做。如果您没有将指针设置为null,而是删除了指针所指向的内存,则会发生问题。

如果您不需要将其设置为null(出于性能原因),为什么还要浪费额外的步骤呢?


6
如果它是一个常量指针呢?

2
不,将其保留为原始值确实没有真正用处,除了显示人们编写代码的无能:-)
它遵循C的传统,即您应该知道自己在做什么。在C时代,让编译器将已释放指针设置为NULL的成本被认为过高,这个问题已经延续到了使用delete的C++中。如果您正确编码,那么让编译器将指针设置为NULL是一种浪费,因为您要么将其设置为其他内容,要么不再使用它。
如果您真的想使代码更安全,您可以执行以下操作(在C中):
void myFree (void **pMem) {
    free (**pMem);
    *pMem = NULL;
}
myFree (&x);

不仅仅是:

free (x);

但是,如果你要达到那个级别(并引入这样的可恶之物),只需切换到Java并完成它,然后你就不必担心手动内存管理了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接