I have code like bellow... class AncestorClass { public: AncestorClass() {} virtual ~AncestorClass() {} static void* operator new(size_t _size) { cout << "AncestorClass new" << endl; AncestorClass* _ptr = ::new AncestorClass(); if (_ptr) _ptr->Initialize(); return _ptr; } static void operator delete(void* _ptr) { cout << "AncestorClass delete" << endl; if (_ptr) ((AncestorClass*)_ptr)->Finalize(); ::delete _ptr; } virtual void Initialize() { cout << "Ancestor Initialize" << endl; } virtual void Finalize() { cout << "Ancestor Finalize" << endl; } }; class DerivedClass : public AncestorClass { public: DerivedClass() {} virtual ~DerivedClass() {} static void* operator new(size_t _size) { cout << "DerivedClass new" << endl; DerivedClass* _ptr = ::new DerivedClass(); if (_ptr) _ptr->Initialize(); return _ptr; } static void operator delete(void* _ptr) { cout << "DerivedClass delete" << endl; ((DerivedClass*)_ptr)->Finalize(); ::delete _ptr; } virtual void Initialize() { cout << "DerivedClass Initialize" << endl; } virtual void Finalize() { cout << "DerivedClass Finalize" << endl; } }; int main() { AncestorClass* t = new DerivedClass; delete t; return 0; } What I expected result is... DerivedClass new DerivedClass Initialize DerivedClass delete DerivedClass Finalize but what in real is... DerivedClass new DerivedClass Initialize DerivedClass delete AncestorClass Finalize Where's my problem and how to fix it? -- [ See http://www.gotw.ca/resources/clcm.htm for info about ] [ comp.lang.c++.moderated. First time posters: Do this! ]