2

演算子 new() をオーバーロードして、void* とは異なる戻り値を持つことは可能ですか?

私は2つの構造を持っています:

1 つの構造体 (A) は、データを保持するだけで、その他のデータは保持しません。

2 番目の構造体 (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結果を得る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 に答える