分配运算符重载

时间:2014-07-13 11:01:11

标签: c++ allocation

#include <iostream>
#include <new>
#include <cstdlib>

using std::cout;

struct C{ };

struct A
{
    void* operator new(std::size_t, C*, C*){ A a; return &a; }
};

A *a= new A; //candidate function not viable: requires 3 arguments, but 1 was provided


int main(){ }

我没有理解这个错误。

  

如果分配的类型是类类型T或其数组,则   在T的范围内查找分配函数的名称。如果这样   查找无法找到名称,或者分配的类型不是类   在类型中,分配函数的名称在全局范围内查找。

我们在全局范围内隐式定义了分配函数,由库提供。有什么问题?我预计会应用重载决策。

我也想了解,这样的分配函数(有三个参数)的用途是什么。

1 个答案:

答案 0 :(得分:2)

正如引言所说,它只会查找全局范围中的分配函数,如果在类的范围内找不到名称。在您的情况下,它找到了名称,因此不会在全局范围内查找它。唯一的问题是你的分配函数的参数数量与你调用它的方式有关。

如果要确保使用全局分配功能:

A *a = ::new A;

如果要调用您定义的分配函数,则需要执行以下操作:

A *a = new (someC, someOtherC) A;