重载 operator new

6
我将重载operator new操作符,代码如下:
class A {
public:
    void* operator new(size_t) { return (void*) Buf; }
};

当我尝试编译时,出现了“声明operator new为非函数错误”的提示。请问有人能帮我解决吗?


1
你有没有定义“new”为其他内容以进行调试的宏?这些宏可能会混淆此处的运算符声明。 - s_b
2个回答

11

你是否定义了size_t? 在使用之前,需要包含stddef.h头文件。但更好的做法是包含cstddef并使用std::size_t

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


1

我猜测你正在使用一个相当现代和严格的编译器。你遇到的错误是因为size_t未被识别。严格来说,你需要#include一些定义它的东西,并且你还应该使用C++名称:std::size_t

例如:

#include <cstddef>

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接