我试图实现这个:
namespace Test
{
void* operator new(size_t s)
{
return malloc(s);
}
}
但是g ++(4.3.1)说:
void* Test::operator new(size_t)’ may not be declared within a namespace
我做错了吗?
如果是,无论如何都要重载新的操作符以便在我的类中使用?我不想创建一个基类,并让我的所有类继承自这样的基类。
答案 0 :(得分:6)
您只能(重新)将operator new
定义为全局命名空间的成员或类(隐式静态)成员。
如果您没有公共基类,则需要为每个要为其专门实现的类定义operator new
。当然,您可以委托一个共同的全球职能部门。
答案 1 :(得分:3)
是的,你做错了什么。根据标准的§3.7.3.1/ 1,“分配函数应该是类成员函数或全局函数;如果在除全局范围之外的命名空间范围内声明分配函数或声明分配函数,则程序格式不正确全局范围内的静态。“
这似乎不允许你想要的东西。
答案 2 :(得分:0)
好吧,编译器已经告诉你你到底做错了什么。独立的“operator new”可能不会在除全局命名空间之外的任何命名空间中声明。
为什么在地球上你决定在'命名空间测试'中声明它?你有什么想要实现的呢?