为什么new 不能是虚函数??

liangneo 2009-12-24 01:58:43
最近在写一个内存管理程序,想重载new并让其有多态,但不能编译通过!!
请求解答!!

1>f:\vs2008\test\test007\test007\allocatedobject.h(21) : error C2650: “new”: 不能是虚函数
1>f:\vs2008\test\test007\test007\allocatedobject.h(22) : error C2650: “delete”: 不能是虚函数
1>f:\vs2008\test\test007\test007\allocatedobject.h(21) : error C2253: “Neo::AllocatedObject::operator new”: 纯说明符或抽象重写说明符只允许在虚函数上使用
1>f:\vs2008\test\test007\test007\allocatedobject.h(22) : error C2253: “Neo::AllocatedObject::operator delete”: 纯说明符或抽象重写说明符只允许在虚函数上使用
...全文
223 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2009-12-24
  • 打赏
  • 举报
回复
呵呵,本身就是static 的,即使你重载之后还是为static 的,这个你就别想太多了。
dskit 2009-12-24
  • 打赏
  • 举报
回复
new delete 是表达式
这个得看C++primer最后一部分了。改变new,delete,可以通过重载类的operator_new, operator_delete来实现
evidence 2009-12-24
  • 打赏
  • 举报
回复
同意二楼
new delete都是静态的成员函数,不能是虚函数
lie1213 2009-12-24
  • 打赏
  • 举报
回复
虚函数 就是你的函数都没有定义 你让编译器怎么给你创建 有时候许多的编程语言都要从逻辑角度出发 你就会得到答案了 比如我让你去干件事情 没给你说干什么 你会去干吗? 虚函数也是如此 而且NEW DELETE都是静态的在设计的时候 而且有的比如NEW DELETE都是不能重载的 设计者认为什么都能重载的话 就会让语法很混乱 出现歧义 而且让别人看上去能难懂 比如域运算符号就不能重载
cattycat 2009-12-24
  • 打赏
  • 举报
回复
实际上是operator new()和operator delete()函数,这个不能重载为虚函数,语法嘛。
肯定有办法满足楼主的需要,但不是重载new和delete
JerryNing 2009-12-24
  • 打赏
  • 举报
回复
晕new, delete是操作符,不是函数。
malloc才是函数。
sandyandy 2009-12-24
  • 打赏
  • 举报
回复
重载类的 new, delete, 不能做为虚函数
taodm 2009-12-24
  • 打赏
  • 举报
回复
呃,可以结贴了。
yshuise 2009-12-24
  • 打赏
  • 举报
回复
即使没有写static,实际上这也是隐式存在。
healer_kx 2009-12-24
  • 打赏
  • 举报
回复
语法规定的。。。我也没办法啊。。。哎。
yshuise 2009-12-24
  • 打赏
  • 举报
回复
new,delete是静态函数。类还没有存在的时候他就存在了,更何况是后来的虚函数了。

64,654

社区成员

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

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