是否可以重载运算符new()以使其具有与void *不同的返回值?
我有两个结构:
一个结构(A)仅保存数据,不保存数据。
第二个结构(B)的构建类似于第一个结构的指针:
struct A;
struct B
{
private:
A* ptr;
public:
A& operator*() { return (*ptr); };
A& operator->() { return (*ptr); };
};
struct A
{
int data;
B operator&() { B ret; ret.ptr = this; return ret; };
};
这个想法很简单。
我不希望任何外部类不直接处理指向A的指针。
但是,我确实希望它们能够创建A的实例。是否可以重写A的新运算符以返回B的实例?现在不要紧记安全问题,以及处理删除,这只是一个简单的简化示例,可以解释我的问题。
最佳答案
运算符new
仅负责为该类分配内存,然后C++在内部调用构造函数以初始化该内存,因此,如果要覆盖new A
导致B
生成某些内容,则应覆盖C++!
相反,您可能具有:
struct A {
private
friend struct B;
A() {}
};
struct B {
static B new_A() {return B(new A());}
}