extern "C" { #include #include #include } #include //location new void* operator new(size_t size,const char* src,int line) { void *p; p = malloc(size); cout << "location new in " << src << " at line " << line << " size " << size << " alloc " << (unsigned int)p << '\n'; return p; } //location delete void operator delete(void* p,const char* src,int line) { cout << "location delete in " << src << " at line " << line << " alloc " << (unsigned int)p << '\n'; free(p); } //overloaded delete void operator delete(void* p) { cout << "overloaded delete alloc " << (unsigned int)p << '\n'; free(p); } #define new new(__FILE__,__LINE__) class X { public: int *val; char filler[2]; X() { val=NULL; } X(int x) { cout << "CON\n"; //entering constructor val = new int; *val = x; cout << "EXIT CON\n"; //exiting constructor } ~X() { cout << "DES\n"; //entering destructor delete val; cout << "EXIT DES\n"; //exiting destructor } };//end class X void doit(); // function main ---------------------------------------------- int main() { doit(); return 0; }//end main // function doit ---------------------------------------------- void doit() { X x(32); cout << "address of object x is " << (unsigned int) &x << '\n'; X *p = new X(33); cout << "p = " << (unsigned int) p << '\n'; delete p; }//end doit