new和delete重载

通过重载new和delete,我们可以自己实现内存的管理策略。new和delete只能重载为类的静态运算符。而且重载时,无论是否显示指定static关键字,编译器都认为是静态的运算符重载函数。
重载new时,必须返回一个void *类型的指针,它可以带多个参数,但第1个参数必须是size_t类型,该参数的值由系统确定。
static void * operator new(size_t nSize)
{
  cout << "new操作符被调用, size = " << nSize << endl;
  void * pRet = new char[nSize];
  return pRet;
}
重载delete时必须返回void类型,它可以带有多个参数,第2个参数必须是要释放的内存的地址void *,如果有第2个参数,它必须为size_t类型。
static void operator delete(void * pVoid)
{
  cout << "delete操作符被调用." << endl;
  delete [] pVoid;
}
一个类可以重载多个new运算符,但是只能重载一个delete类运算符。

posted @ 2012-06-21 15:29  深圳itjob  阅读(282)  评论(0)    收藏  举报