C++通过new来在堆上创建对象,这一过程分为两步:
1.分配一块大小合适的内存
2.调用构造函数初始化对象
C++允许重载operator new,但是请注意,这个重载的operator new只需且只能完成第一步的工作,即:分配内存;初始化对象的任务由编译器负责完成。
#include <iostream>
using namespace std;
class A{
public:
A()
{
cout<<"A constructor"<<endl;
}
~A()
{
cout<<"A destructor"<<endl;
}
};
void* operator new(size_t size)
{
cout<<"call operator new"<<endl;
if(size == 0) //编译器自带的operator new也允许分配size为0的内存
{
size = 1;
}
return malloc(size);
}
void operator delete(void* ptr)
{
cout<<"call operator delete"<<endl;
if(ptr == 0) return; //C++