全局重载跟类中重载
//全局new操作符
void * __cdecl operator new(size_t size,POOL_TYPE PoolType=PagedPool)
{
KdPrint(("global operator new\n"));
KdPrint(("Allocate size :%d\n",size));
return ExAllocatePool(PagedPool,size);
}
//全局delete操作符
void __cdecl operator delete(void* pointer)
{
KdPrint(("Global delete operator\n"));
ExFreePool(pointer);
}
class TestClass
{
public:
//构造函数
TestClass()
{
KdPrint(("TestClass::TestClass()\n"));
}
//析构函数
~TestClass()
{
KdPrint(("TestClass::~TestClass()\n"));
}
//类中的new操作符
void* operator new(size_t size,POOL_TYPE PoolType=PagedPool)
{
KdPrint(("TestClass::new\n"));
KdPrint(("Allocate size :%d\n",size));
return ExAllocatePool(PoolType,size);
}
//类中的delete操作符
void operator delete(void* pointer)
{
KdPrint(("TestClass::delete\n"));
ExFreePool(pointer);
}
private:
char buffer[1024];
};
void TestNewOperator()
{
TestClass* pTestClass = new TestClass;
delete pTestClass;
pTestClass = new(NonPagedPool) TestClass;
delete pTestClass;
char *pBuffer = new(PagedPool) char[100];
delete []pBuffer;
pBuffer = new(NonPagedPool) char[100];
delete []pBuffer;
}