我写了这篇文章,想知道为什么“已删除”没有显示为输出。
int *p=NULL;
p=new int(10);
cout<<*p<<endl;
delete p;
if(p==NULL)cout<<"deleted"<<endl;
有人可以解释为什么使用delete后它不打印以及为什么delete不使指针为NULL吗?
答案 0 :(得分:1)
delete
适用于指针值而非指针变量。例如,这完全合法
int* some_func();
delete some_func();
如您所见,这里没有变量,也没有要设置为NULL
的变量。
答案 1 :(得分:1)
这是因为当您说删除p时,您正在删除指向内存的指针,这将完全删除对您分配的新内存的引用。当您说p == NULL时,您正在检查指针是否设置为null,而实际上它所指向的内存已取消分配,因此指针没有指向任何东西。这与在C ++中将其指向NULL并不相同。