是否可以重载运算符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());}
}

10-08 05:45
查看更多