对于不同的返回值,重载运算符new

时间:2012-10-30 18:27:13

标签: c++ pointers operator-overloading new-operator

是否可以重载运算符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的实例?现在没关系安全问题,处理删除,这只是一个简单,简化的例子来解释我的问题。

2 个答案:

答案 0 :(得分:3)

没有

3.7.4.1分配功能:

  

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

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

答案 1 :(得分:2)

运算符new仅负责为类分配内存,然后C ++在内部调用构造函数来初始化该内存,因此如果要覆盖某些内容到new A,则会导致B ,那么你应该覆盖C ++!

相反,你可能有:

struct A {
private
    friend struct B;
    A() {}
};
struct B {
    static B new_A() {return B(new A());}
}