为什么在C ++中使用Delete后指针不是NULL

时间:2018-07-20 05:40:27

标签: c++ pointers

我写了这篇文章,想知道为什么“已删除”没有显示为输出。

int *p=NULL;
p=new int(10);
cout<<*p<<endl;
delete p;
if(p==NULL)cout<<"deleted"<<endl;

有人可以解释为什么使用delete后它不打印以及为什么delete不使指针为NULL吗?

2 个答案:

答案 0 :(得分:1)

delete适用于指针值而非指针变量。例如,这完全合法

int* some_func();

delete some_func();

如您所见,这里没有变量,也没有要设置为NULL的变量。

答案 1 :(得分:1)

这是因为当您说删除p时,您正在删除指向内存的指针,这将完全删除对您分配的新内存的引用。当您说p == NULL时,您正在检查指针是否设置为null,而实际上它所指向的内存已取消分配,因此指针没有指向任何东西。这与在C ++中将其指向NULL并不相同。