'删除指针'只是意味着'*指针= 0'吗?

Avi*_*ane 5 c++ free destructor memory-management delete-operator

# include <iostream>

int main()  
{  
using std::cout;
int *p= new int;

*p = 10;
cout<<*p<<"\t"<<p<<"\n";
delete p;
cout<<*p<<"\t"<<p<<"\n";

return 0;

}
Run Code Online (Sandbox Code Playgroud)

输出:
10 0x237c010
0 0x237c010

在删除p之后,为什么指针p保持其值?不删除释放指针p?
究竟是什么意思'释放指针'?
"删除p"只是意味着'*p = 0'吗?(从输出看来)

jus*_*tin 6

在删除p之后,为什么指针p保持其值?

这就是语言的设计方式.如果您希望将所持有的指针归零,则需要自己将其指定为零.指针p是另一块内存,与它指向的分配/对象分开.

不删除释放指针p?

它将析构函数称为对象并将内存返回给系统(如free).如果是一个array(delete[]),将调用所有元素的析构函数,然后返回内存.

究竟是什么意思'释放指针'?

当您需要系统中的一块内存时,您可以分配它(例如使用new).使用完毕后,使用相应的免费/删除调用将其返回.这是一种资源,你必须返回.如果你不这样做,你的程序将泄漏(没有人想要).

  • @Avinash:为什么解除分配内存会改变其内容? (3认同)
  • @AvinashSonawane:有关详细信息,请参阅[我最喜欢的网站答案](http://stackoverflow.com/a/6445794/734069).访问已释放的内存与访问指向超出范围的变量的指针没有什么不同. (2认同)