#include<iostream>
#include<string.h>
//typedef unsigned int size_t;
using namespace std;
class A
{
public:
A();
void operator delete(void *p); //定义操作符delete的重载函数
};
A :: A()
{
}
void A :: operator delete(void *p)
{
::delete p;
}
main()
{
A *p = new A();
delete p;
if(p==NULL)
{
cout << "successful!" << endl;
}
else
{
cout << "fail!" << endl;
}
return 0;
}
代码如上,为什么输出结果是fail? 而不是successful呢
解决方案
8
delete功能只是代表释放了该指针对所指向内存的控制权限,然后其他程序也可以来用这块内存,所以delete后的内存里面存储的可能是个随机值,也可能还是原来的值
4
。
delete 没有必要,也不可能把指针置空
原因是 delete 作用在指针上(而非指针的引用,或指针的地址之上)
它只是 调用对象的析构函数,析构对象,并释放内存
delete 没有必要,也不可能把指针置空
原因是 delete 作用在指针上(而非指针的引用,或指针的地址之上)
它只是 调用对象的析构函数,析构对象,并释放内存
8
delete只负责释放内存,不负责把指针设置为NULL,你的指针仍指向那块被释放的内存
8
delete只是将new出的内存空间释放了,p仍然指向被释放的内存地址,又不是null。
4
另外,delete 只认内存地址,不认指针
–delete不知道指针,指向这个地址
他的操作数是不可修改的。
T *p ;对他来说,等价于 T* const p;
—
他不负责给指针清零
只负责,析构对象,和释放内存
–delete不知道指针,指向这个地址
他的操作数是不可修改的。
T *p ;对他来说,等价于 T* const p;
—
他不负责给指针清零
只负责,析构对象,和释放内存