全局重载跟类中重载
//全局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; }
驱动程序中重载new与delete
最新推荐文章于 2022-05-05 22:26:11 发布