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

时间:2010-10-01 02:56:33

标签: c++ pointers null delete-operator

  

可能重复:
  Why doesn't delete set the pointer to NULL?

是否有指向解除分配内存的指针?

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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

它遵循C的传统,因为你应该知道你在做什么。将编译器设置释放指针设置为NULL的成本在C天被认为太高,并且已经转移到带有delete的C ++。如果编码正确,那么让编译器将指针设置为NULL是一种浪费,因为你要么将它设置为其他东西,要么不再使用它。

如果确实希望让您的代码更安全,那么您可以执行类似(在C中)的操作:

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

而不只是:

free (x);

但是,如果你要进入那个级别(并引入这样的憎恶),只需切换到Java并完成它,那么你根本不必关心手动内存管理。< / p>