分配运算符重载

圣安东尼奥
#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的范围内查找分配函数的名称。如果此查找未能找到名称,或者如果分配的类型不是类类型,则分配函数的名称在全球范围内查找。

我们已经在库提供的全局范围内隐式定义了分配函数。怎么了 我期望将应用重载解决方案。

我也想了解,使用这种分配函数(带有三个参数)的目的是什么。

约瑟夫·曼斯菲尔德

就像引号所说的那样,如果在类的作用域中查找分配函数找不到名称,它只会在全局作用域中查找分配函数在您的情况下,它正在查找名称,因此不要在全局范围内查找它。唯一的问题是,分配函数的调用方式参数数量错误。

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

A *a = ::new A;

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章