/********************************************\
|????歡迎轉載, 但請保留作者姓名和原文鏈接, 祝您進步并共勉!???? |
\********************************************/
關于"Effective C++"中的new/delete的補充
作者: Jerry Cat
時間: 2006/06/01
鏈接:?http://www.shnenglu.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 閱讀(822)
評論(1) 編輯 收藏 引用