C++对运算符new与delete重载的困惑。
#include<iostream.h>#include<malloc.h>classRect //定义类{ intlengt...
#include <iostream.h>#include <malloc.h>class Rect //定义类{ int length,width; //数据成员 public: Rect(int l,int w):length(l),width(w); //构造函数 {} void display() { cout<<"面积:"<<length*width<<endl; } void *operator new(size_t size) //重载new { cout<<"重载new运算符分配内存"<<endl; return malloc(size); } void operator delete(void *p) //重载delete { free(p); cout<<"重载delete释放内存"<<endl; }};void main(){ Rect *p; p = new Rect(5,9); //书上说相当于p = Rect::operator new Rect(5,9); p->display(); //书上说相当于p = Rect::operator delete p; delete p;} 我不解的是:应该在主函数第二行调用了重载的new吧,但书上说相当于p = Rect::operator new Rect(5,9);Rect(5,9)不是重载的new的参数吧他是怎么完成调用的?请高手详细解释。。
展开
2个回答
展开全部
new operator和operator new是不一样的,new operator是不会被重载的
operator new只是分配内存,就相当于malloc或者calloc
而new operator先调用了operator new,然后再调用类类型的构造函数进行初始化
operator new只是分配内存,就相当于malloc或者calloc
而new operator先调用了operator new,然后再调用类类型的构造函数进行初始化
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询