2

是否可以重载运算符 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 的 new 运算符以返回 B 的实例?现在不要介意安全问题和处理删除,这只是一个简单的简化示例来解释我的问题。

4

2 回答 2

3

不。

3.7.4.1 分配功能:

...返回类型应为void*. ...

正如 BigBoss 所说,这是因为new操作员调用operator new并期望它具有某种返回类型。

于 2012-10-30T18:55:22.437 回答
2

运算符new只负责为类分配内存,然后 C++ 内部调用构造函数来初始化该内存,所以如果你想覆盖某些东西以new A导致 a B,那么你应该覆盖 C++!

相反,您可能有:

struct A {
private
    friend struct B;
    A() {}
};
struct B {
    static B new_A() {return B(new A());}
}
于 2012-10-30T18:39:38.883 回答