【发布时间】:2011-12-19 10:03:40
【问题描述】:
我重载了 new 和 delete 运算符。我想保存指向“旧”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[];
它已成功编译,但我在启动时有核心转储。
可以在new 中调用malloc,这真是糟糕 的想法。可以拨打new(std::nothrow),但也很糟糕。
【问题讨论】:
-
在stackoverflow中查看这个链接stackoverflow.com/questions/583003/overloading-new-delete
-
不要全局重载new和delete,用malloc和free怎么样?
-
@Yola:定义“全局”。如果重载声明在翻译单元中不可见,则不能使用。
标签: c++ memory-management new-operator redefinition