关于重载new/delete

#include <iostream> #include <string> using namespace std; class Desk { public: Desk() { cout<<"Desk::constructor"<<endl; } ~Desk() { cout<<"Desk::destructor"<<endl; } }; void* operator new(size_t size) { /*cout<<"alloc by override new."<<endl;*/ printf("alloc by override new./n"); return malloc(size); } void operator delete(void* m) { //printf("free by override delete."); if (NULL == m) { return; } puts("operator delete"); free(m); } int main() { Desk desk; Desk *pd = new Desk; delete pd; return 0; }  

 

0、在vs2005下的输出:

Desk::constructor

alloc by override new.

Desk::constructor

Desk::destructor

operator delete

Desk::destructor

 

1、上面的代码,在vs2003下跑,重载的delete运算符没有被调用成功;但在vs2005下,可顺利运行。

 

2、main函数的第一行的desk对象时在栈中分配,并没有调用全局的new运算符。

你可能感兴趣的:(null,delete,include,Constructor,destructor)