我正在重载operator new,如下所示
class A{
public:
void* operator new(size_t) { return (void*) Buf;}
};
当我尝试编译时,我得到“运算符new声明为非函数错误”。有人可以帮我这个吗?
由于
答案 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;}
};