4

可能重复:
为什么不删除将指针设置为 NULL?

指向已释放内存的指针有什么目的吗?

4

3 回答 3

6

C++ 完全按照您的指示去做。您没有将指针设置为空,而是删除了指针指向的内存。

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

于 2010-10-01T02:58:42.920 回答
6

如果它是一个 const 指针怎么办?

于 2010-10-01T03:03:11.827 回答
2

不,将其设置为原始值并没有真正的用处,除了显示人们在编写代码方面是多么无能:-)

它遵循 C 语言的传统,因为您应该知道自己在做什么。在 C 时代,让编译器将释放的指针设置为 NULL 的成本被认为太高了,这已经延续到带有delete. 如果您正确编码,那么让编译器将指针设置为 NULL 是一种浪费,因为您要么将其设置为其他值,要么不再使用它。

如果你真的想让你的代码更安全,你会做类似(在 C 中)的事情:

void myFree (void **pMem) {
    free (**pMem);
    *pMem = NULL;
}
myFree (&x);

而不仅仅是:

free (x);

但是,如果您要达到那个级别(并引入这种可憎的东西),只需切换到 Java 并完成它,那么您根本不必担心手动内存管理。

于 2010-10-01T02:59:41.473 回答