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'吗?(从输出看来)
在删除p之后,为什么指针p保持其值?
这就是语言的设计方式.如果您希望将所持有的指针归零,则需要自己将其指定为零.指针p是另一块内存,与它指向的分配/对象分开.
不删除释放指针p?
它将析构函数称为对象并将内存返回给系统(如free).如果是一个array(delete[]),将调用所有元素的析构函数,然后返回内存.
究竟是什么意思'释放指针'?
当您需要系统中的一块内存时,您可以分配它(例如使用new).使用完毕后,使用相应的免费/删除调用将其返回.这是一种资源,你必须返回.如果你不这样做,你的程序将泄漏(没有人想要).