分配操作符重载
Allocation operator overloading
#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的作用域中查找查找查找名称失败,或者分配的类型不是类类型,分配函数的名称在全局作用域中查找。
在全局作用域中隐式定义了分配函数,由library提供。有什么问题吗?我期望重载解析会被应用。
我也想了解一下,使用这样的分配函数(有三个参数)有什么意义。
正如引号所说,如果在类的作用域中查找分配函数未能找到名称,则只会在全局作用域中查找它。在您的示例中,它正在查找名称,因此不会在全局作用域中查找它。唯一的问题是你的分配函数的参数数量与你调用它的方式不一致。
如果您想确保使用全局分配函数:
A *a = ::new A;
如果你想调用你定义的分配函数,你需要这样做:
A *a = new (someC, someOtherC) A;
相关文章:
- 重载操作符+:表达式必须是整型或无作用域枚举类型
- 重载操作符
- 如何重载操作符==外模板类使用友元函数
- 重载*操作符,使其在左右两边都工作
- 重载操作符<对于非随机迭代器
- 在c++中重载操作符的时间和原因
- 如何在c++中重载=操作符来通过引用进行复制
- 如何在c++中获取定义为友元的重载操作符的地址
- 使用重载操作符的文件操作表达式没有给出预期的结果
- 重载操作符()
- 重载操作符()并在类内使用
- 类中的重载操作符+
- 定时使用重载操作符
- c++带类的重载操作符
- 用列表容器重载[]操作符
- 重载操作符=
- 任何重载操作符()的静态检测
- 重载操作符以处理类对象
- 在使用另一个类的类中重载操作符==
- 派生类和基类中的重载操作符不同