我认为删除指针指向的内存应该用零覆盖。(不确定) 但它仍然指向int值10和相同的地址。发生了什么事?
int *p = new int;
*p = 10;
cout << *p << endl; //10
cout << p << endl; //0x7fafc3c02e80
delete p;
cout << *p << endl; //10
cout << &(*p) << endl; //0x7fafc3c02e80!
return 0;
答案 0 :(得分:2)
delete运算符释放指针指向的内存。一旦释放,它可以随时重新分配,因此访问该指针将产生不可预测的结果。在你的程序中,只是存储器还没有被重新分配用于其他任何东西。
https://msdn.microsoft.com/en-us/library/h6227113.aspx
具体做法是:
“在对象上使用delete运算符释放其内存。删除对象后取消引用指针的程序可能会产生不可预测的结果或崩溃。 当删除用于释放C ++类对象的内存时,在释放对象的内存之前调用对象的析构函数(如果对象有析构函数)。“
答案 1 :(得分:1)
您已返回分配给空闲堆池的空间。这并不意味着什么东西会写入零。这需要时间,你可能不想花时间在那个任务上。
我认为某些类型的析构函数可能会在销毁期间清除其存储空间,但int
却没有。
如果您确实希望删除数据,请在致电delete
在告诉系统完成内存后,继续使用内存也是一个坏主意。
因此,您可以选择在NULL
之后将指针设置为delete
,如果您搞砸了并尝试使用旧指针,这将有助于导致异常。
答案 2 :(得分:0)
您没有删除指针的实际value
或其指向的值。你只是释放内存所以其他指针“稍后”将能够指向同一个位置。