C++過載new函式
阿新 • • 發佈:2019-01-29
(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;
}