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的参数吧他是怎么完成调用的?请高手详细解释。。 展开
 我来答
百度网友c758bbd
2011-10-11 · TA获得超过879个赞
知道答主
回答量:93
采纳率:0%
帮助的人:65.6万
展开全部
new operator和operator new是不一样的,new operator是不会被重载的
operator new只是分配内存,就相当于malloc或者calloc
而new operator先调用了operator new,然后再调用类类型的构造函数进行初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魏翔潭睿
2019-11-19 · TA获得超过3721个赞
知道大有可为答主
回答量:3085
采纳率:27%
帮助的人:223万
展开全部
你可以在main函数第二行设置断点进行跟踪,这一行语句会执行两次。你会得到你想要的答案的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式