C++ 重载new和delete必须为static成员函数吗?

yby4769250 2011-10-05 07:04:04
如题,在练习写个自己的内存池,重载了new和delete发现,无论void* operator new(size_t)前面是否显式声明有static,它都是static成员函数?是否是这样?如果是,如何解释?
...全文
724 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
stackoverlow 2011-10-05
  • 打赏
  • 举报
回复
不懂~~每日一回
qq120848369 2011-10-05
  • 打赏
  • 举报
回复
简单的明白opeartor new相当于malloc,还没有placement new对象,所以应该属于类而不是对象。
taodm 2011-10-05
  • 打赏
  • 举报
回复
呵呵,楼主,等你学多了,你就自己明白了。
反正,学习的弯路都是必须自己走过了才能明白的。
大家都这么过来的。
yby4769250 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chiyer 的回复:]
c++ iso

12.5
Any allocation function for a class T is a static member (even if not explicitly declared static).
[/Quote]

很多大牛在涉及到标准时,总是能翻阅C++标准,我也要这样学习啊,呵呵
yby4769250 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nuaa_ybl 的回复:]
因为new对象时,对象还没有,所以要声明为static函数。delete对象也一样。
[/Quote]

和我的想法差不多
yby4769250 2011-10-05
  • 打赏
  • 举报
回复 1
[Quote=引用 6 楼 taodm 的回复:]
如果当初规定为非static,你现在一样会找出个理由的。
规定,就不要硬找理由了,很多只是c++创始人的一时审美观而已。
[/Quote]

new为static不可能这样,不可能仅仅因为发明者的偏好,如果说函数参数列表为什么用()圆括号是出于偏好还能让人信服,new为static也是出于偏好是无法让人信服的
星羽 2011-10-05
  • 打赏
  • 举报
回复
c++ iso

12.5
Any allocation function for a class T is a static member (even if not explicitly declared static).

代码栈 2011-10-05
  • 打赏
  • 举报
回复
因为new对象时,对象还没有,所以要声明为static函数。delete对象也一样。
quwei197874 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taodm 的回复:]
如果当初规定为非static,你现在一样会找出个理由的。
规定,就不要硬找理由了,很多只是c++创始人的一时审美观而已。
[/Quote]++
taodm 2011-10-05
  • 打赏
  • 举报
回复
如果当初规定为非static,你现在一样会找出个理由的。
规定,就不要硬找理由了,很多只是c++创始人的一时审美观而已。
yby4769250 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 songjinshi 的回复:]
运算符重载无所谓静态与否,你就把它当成一个普通运算符使用就行了,想要完成什么样的工作就写进去就行了。
[/Quote]

其他如+-*/当然可以像你这么说,但是new和delete却不行,不信你试试,重载new或者delete,你在函数体内访问类的非static成员看看
yby4769250 2011-10-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
规定,仅此而已。
建议先去找本effective c++增强下语法基础。
[/Quote]

以前没重载过new和delete,所以对这个规定不是很清楚。现在这个规定,我也是需要知道原因的,我在二楼的想法不知道是否正确,但是感觉是正确的
Vincent_Song 2011-10-05
  • 打赏
  • 举报
回复
运算符重载无所谓静态与否,你就把它当成一个普通运算符使用就行了,想要完成什么样的工作就写进去就行了。
yby4769250 2011-10-05
  • 打赏
  • 举报
回复
似乎自己想通了,new是对全局的堆内存操作的,不是对对象本身的内存进行操作的,因此必须为static,不是属于对象的成员函数,而是类的成员函数
taodm 2011-10-05
  • 打赏
  • 举报
回复
规定,仅此而已。
建议先去找本effective c++增强下语法基础。

64,648

社区成员

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

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