各位老师好,为什么重载new,会把重载new叫做重载 全局new

liulin2028 2012-11-17 04:57:34
www.cplusplus.com

提供的operator new一共有3个版本。

不知道这个网站的c++是哪一个版本的, 比较出名的有98版本呢, 2003版本,11版本。

以上是从c++标准来区分 版本。



微软自己也搞了一些operator new函数。 比如在mfc中。 就有检测内存泄露的版本。
个人认为 形如 微软的这种行为才叫重载 全局new, 只要使其 调用到了微软的检测内存泄露的版本,

无论是 内置类型,还是自定义类型。都是具有检测内存泄露的功能。

有的网友认为以下行为也输入 重载全局new

class Test
{
public:
void* operator new(,,,){......};

};


不知道为什么有这这种观念?

我认为这种方式的重载,只能针对Test类的行为, 根本不叫全局。

全局嘛,自然是应对所有类型。

大家觉得呢?

...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liulin2028 2012-11-18
  • 打赏
  • 举报
回复
引用 3 楼 ri_aje 的回复:
类中重载只对为该类对象分配内存时,才可能覆盖全局重载的功能,具体而言。 new Test; 的时候,优先使用类里面的重载,如果存在的话;如果不存在,unqualified name lookup 继续找全局的重载。 ::new Test; 的时候,无论类里面是否重载,都直接查找全局重载。 楼主还是多看点好书吧,别老听网友的,他们都未必明白呢,跟不明白的学……
关于这个帖子的知识点,你回答的答案, 请问我看哪一本书比较合适呢?
yaoyaomu 2012-11-18
  • 打赏
  • 举报
回复
没意义的重载~~~
ri_aje 2012-11-18
  • 打赏
  • 举报
回复
引用 4 楼 liulin2028 的回复:
引用 3 楼 ri_aje 的回复:类中重载只对为该类对象分配内存时,才可能覆盖全局重载的功能,具体而言。 new Test; 的时候,优先使用类里面的重载,如果存在的话;如果不存在,unqualified name lookup 继续找全局的重载。 ::new Test; 的时候,无论类里面是否重载,都直接查找全局重载。 楼主还是多看点好书吧,别老听网 关于这个帖子的知识点,你回答的答案, 请问我看哪一本书比较合适呢?……
good question. 我回答的东西是从标准里看到的,不过我随便翻了一下 c++ primer 5th edition,19.1.1 专门讲 overloading new and delete 的,言简意赅的陈述了标准中的内容。c++ primer 系列就是好书,Lippman 的 c++ 造诣那是没得说的,另一本内存模型的书也是他写的,很好。楼主跟这样的大牛学就没错了,看一本顶你看一堆垃圾网页。
ri_aje 2012-11-18
  • 打赏
  • 举报
回复
类中重载只对为该类对象分配内存时,才可能覆盖全局重载的功能,具体而言。 new Test; 的时候,优先使用类里面的重载,如果存在的话;如果不存在,unqualified name lookup 继续找全局的重载。 ::new Test; 的时候,无论类里面是否重载,都直接查找全局重载。 楼主还是多看点好书吧,别老听网友的,他们都未必明白呢,跟不明白的学只能越搞越糊涂。
转角天边 2012-11-17
  • 打赏
  • 举报
回复
我看到有说过 重载new会屏蔽全局的new,调用 A:: operator new;
yh_no_code 2012-11-17
  • 打赏
  • 举报
回复
对于该类而言不就是全局的了吗,成员变量相对于类来说不是全局么!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧