我已经重载了新的和删除操作符。我想保存指向'旧'new
和delete
的指针,将其称为'新'new
和delete
。例如:如何将指针保存到重新定义的运算符?
#include "h.h"
void * operator new (size_t size, /*args*/) throw (std::bad_alloc)
{
void * p = 0;
p = original_new(size); //calling for 'old' new
//some code
return p;
}
而且类似的操作delete
。
所以,我想在我的头文件键入如下:
static void * (*original_new)(size_t) = ::operator new;
static void * (*original_new_arr)(size_t) = ::operator new[];
static void (*original_delete)(void *) = ::operator delete;
static void (*original_delete_arr)(void *) = ::operator delete[];
成功编译,但我有在启动核心转储。 有可能致电malloc
在new
坏它真的是坏的想法。可以拨打new(std::nothrow)
,但也不好。
检查此链接在stackoverflow http://stackoverflow.com/questions/583003/overloading-new-delete – Raghuram 2011-12-19 10:09:34
不重载新的和全球删除,以及如何使用malloc和免费? – Yola 2011-12-19 10:12:48
@Yola:定义“全局”。如果重载声明在翻译单元中不可见,则不能使用。 – 2011-12-19 10:54:37