重载运算符new

时间:2011-05-06 09:48:31

标签: c++

我正在重载operator new,如下所示

class A{
public:
void* operator new(size_t) { return (void*) Buf;}
};

当我尝试编译时,我得到“运算符new声明为非函数错误”。有人可以帮我这个吗?

由于

2 个答案:

答案 0 :(得分:8)

您是否定义了size_t?您需要包含stddef.h。但最好包括cstddef并使用std::size_t

除了总是返回Buf被搞砸的语义之外,你的声明看起来还不错。 operator new应返回指定为第一个参数的大小的缓冲区。

答案 1 :(得分:1)

我猜你正在使用一个相当现代和严格的编译器。您收到的错误是因为无法识别size_t。严格来说,你需要#include定义它的东西,你也应该使用C ++名称:std::size_t

E.g。

#include <cstddef>

class A{
public:
void* operator new(std::size_t) { return (void*) Buf;}
};