#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的范围内查找分配函数的名称。如果这样 查找无法找到名称,或者分配的类型不是类 在类型中,分配函数的名称在全局范围内查找。
我们在全局范围内隐式定义了分配函数,由库提供。有什么问题?我预计会应用重载决策。
我也想了解,这样的分配函数(有三个参数)的用途是什么。
答案 0 :(得分:2)
正如引言所说,它只会查找全局范围中的分配函数,如果在类的范围内找不到名称。在您的情况下,它找到了名称,因此不会在全局范围内查找它。唯一的问题是你的分配函数的参数数量与你调用它的方式有关。
如果要确保使用全局分配功能:
A *a = ::new A;
如果要调用您定义的分配函数,则需要执行以下操作:
A *a = new (someC, someOtherC) A;