#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;
—
他不负责给指针清零
只负责,析构对象,和释放内存