【重载】重载new和new[]
RT大家谁这么做过,请给个例子。
另外欢迎就此问题展开讨论。
#include <iostream> using namespace std; struct foo { explicit foo( int val=0 ) : val_(val) { cout << "(" << val_ << ")"; } ~foo() { cout << "<" << val_ << ">"; } int val_; static void* operator new[]( size_t size ); // 类形式的new/delete static void operator delete[]( void* raw ); }; char buf[1000]; void* foo::operator new[]( size_t size ) { //如果不是本类的,而是派生类的,要明确拒绝之 // return ::operator new(size); if( 0 == size ) // 须要注意 size = 1; //分配size字节内存; //if(分配成功) // return 指向内存的指针; return buf; // 我只是做个演示 throw std::bad_alloc(); } void foo::operator delete[]( void* raw ) { //如果不是本类的,而是派生类的,要明确拒绝之 //{ // ::operator delete(raw); // return; //} if( 0 == raw ) // 须要注意 return; // 释放分配的内存 // 我只是做个演示 } int main() { delete[] new foo[2]; return 0; }