我重载了 new 和 delete 运算符。我想保存指向“旧”new
和 delete
的指针以将其调用到"new"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)
但它也很糟糕。
最佳答案
你不需要保存指针;定义放置新运算符(任何
operator new
接受多个参数的函数)不
删除现有的运营商;它只会使它们重载。调用
来自放置运算符新函数的标准运算符新函数:
p = ::operator new( size );
请注意,如果您的展示位置新返回,您不想这样做
除了 ::operator new
返回的确切地址之外的任何内容。否则,
delete
将不起作用。如果您使用任何返回任何内容的新展示位置
除了 ::operator new
返回的指针外,您还需要定义一个
新的全局 operator delete
(因为这将是
称为),这反过来意味着你必须定义一个新的标准
operator new
也是如此,以便它能与您的新
运算符删除
。为了避免必须实现所有的
自己管理内存,在你的代码中使用 malloc
和 free
实现。
关于c++ - 如何将指针保存到重新定义的运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559690/