1. 程式人生 > >C++過載new函式

C++過載new函式

(1)在某些時候需要過載new函式,如果直接在類中過載,則會將系統原有的new函式覆蓋掉,呼叫系統原有的new會出錯。
(2)所以辦法就是定義一個基類,將系統的new,delete函式放在基類中,然後定義一個派生類,將新定義的new和delete放在派生類中,並同時使用基類中原有的new,delete。
(3)同時,在定義新的new的時候,一定要同時定義對應的新的delete,因為如果new出錯,系統會自動尋找其對應的delete函式進行處理,如果沒有發現對應的delete,則不會呼叫任何的delete,會有記憶體洩露的風險。新的delete需要與新定義的new有類似的引數列表
//定義new和delete函式一定要定義成static的。
示例如下:

class baseNewDelete {
public:
    static void * operator new(std::size_t size) throw (std::bad_alloc)
    {return ::operator new(size);}
    static void operator delete(void * pMemory) throw ()
    {return ::operator delete(pMemory);}
};

class myNewDelete : public baseNewDelete{
public:
    static
void* operator new(std::size_t size,int a) {return ::operator new(size);} static void operator delete(void *pMemory,int a) {::operator delete(pMemory);} using baseNewDelete::operator new; using baseNewDelete::operator delete; }; int
main() { myNewDelete *temp = new myNewDelete; delete(temp); return 0; }