将operator new()赋值给函数指针?

时间:2013-03-28 13:16:53

标签: c++ function-pointers new-operator

我正在尝试定义一个可以传递“对象分配器”函数的类,并将模板对象的运算符new()作为默认参数。我有以下代码:

template<class _Obj>
class Foo
{
private:
    typedef _Obj (_Obj::*fp_alloc_type)();

public:
    Foo(fp_alloc_type t=_Obj::operator new ());

...
};

这给出了一个编辑错误C2039:'new':不是'SomeObj'的成员

编译器是否为没有定义自己的对象生成'new'的默认实现?我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

无论它是什么,operator new功能不是 任何类的非静态成员函数。即使你宣布 并且定义了一个特定于类的运算符new,它被认为是 静态成员函数;如果需要一个,size_t 参数,然后指向它的指针将是void* (*ptrToNew)( size_t )。 (如果它是一个新的位置,当然会有 更多的论点。)

执行new Foo时,编译器会对其进行名称查找 operator new首先在Foo范围内{如果Foo是一个类 type),然后在全局命名空间中。 (有趣的是, 编译器将查看Foo所在的命名空间 声明。 ADL也不适用。一个operator new函数 在全局命名空间以外的命名空间中永远不会 发现。)除非你在课堂上宣布operator new, 将使用全局operator new函数。