Code Bye

C++ 中delete的重载问题

#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  作用在指针上(而非指针的引用,或指针的地址之上)
它只是 调用对象的析构函数,析构对象,并释放内存

8

delete只负责释放内存,不负责把指针设置为NULL,你的指针仍指向那块被释放的内存

8

delete只是将new出的内存空间释放了,p仍然指向被释放的内存地址,又不是null。

4

另外,delete 只认内存地址,不认指针
–delete不知道指针,指向这个地址
他的操作数是不可修改的。
T *p ;对他来说,等价于 T* const p;

他不负责给指针清零
只负责,析构对象,和释放内存

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ 中delete的重载问题