asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0

/********************************************\
|    欢迎转载, 但请保留作者姓名和原文链接, 祝您进步并共勉!     |
\********************************************/


关于"Effective C++"中的new/delete的补充

作者: Jerry Cat
时间: 2006/06/01
链接: http://www.cppblog.com/jerysun0818/archive/2006/06/01/8009.html


在条款9中强调了要避免遮掩了new的正规形式

那么new有多少种正规形式? 对于一个完整的new它应该有下面四种类型:

void * operator new (size_t size)
{ return ::operator new (size); }
void operator delete(void * p)
{ ::operator delete (p); }

void * operator new[](size_t size)
{ return ::operator new (size * n); }
void operator delete[](void *p)
{ ::operator delete (p); }

void * operator new(size_t size, void *p)
{ return p; }
void operator delete(void *p, void *p2)
{ ::operator delete(p); }

void * operator new[](size_t size, void *p)
{ return ::operator new (size * n); }
void operator delete[](void *p, void *p2)
{ ::operator delete (p); }

尤其是对于[]的操作,要重点注意。

下面是new所对应的调用方法。

void foo();

new T;

new T[10]

new (foo)T;

new (foo)T[10];

所以对于类的设计者来说,如果要重载new操作,最好是实现所有的new操作,以防万一。

posted on 2006-06-01 02:08 Jerry Cat 阅读(695) 评论(1)  编辑 收藏 引用

FeedBack:
# re: 关于"Effective C++"中的new/delete的补充
2006-06-02 23:00 | 笑笑生
code standards  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(7)

随笔档案

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜