0

最初にオブジェクトを返し、次にmyclassの値が格納されているアドレスを返すという明らかな点を除いて、これらのメソッドに違いはありますか?多くの情報源で、Aeonsoftのような大企業でさえ、最初の方法をめったに見ないので、私は尋ねています。私は常に方法2が使用されているのを目にします。ただし、一部のプログラマーはこれが気に入らないので、これについて教え&returnください。

static myclass& getinstance()
{
    static myclass a;
    return a;
}

static myclass* getinstance()
{
    static myclass a;
    return &a;
}

編集 ああみんな私の悪い、私&は最初の方法を忘れた

4

5 に答える 5

4

最初のものはコピーを返すため、意味がありません。ポインタが必要ないため、後者は少しばかげています。

シングルトン作成関数の通常の方法は、参照を返すことです。

static Foo & getFoo()
{
    static Foo impl;
    return impl;
}
于 2012-09-26T16:12:16.647 に答える
2

ポインタではなく参照を返すことは、オブジェクトが存在することを示しているため(つまり、テストする必要がないためNULL)、最初のAPIの方が優れています。どちらの方法でも、ポリモーフィックオブジェクト(つまり、のサブクラスmyclass)を返すことができるため、違いはありません。可能であれば、参照を返すことをお勧めします。

于 2012-09-26T16:12:20.670 に答える
1

最初の方法を修正したので...

どちらが好まれるのかはスタイルの問題です。Cから始めて、後でC ++に移行した人は、参照の使用を考えなくても、当然ポインターを使用する可能性があります。


最初のメソッドは、オブジェクトのコピーを 返すため、実際にはシングルトンを作成しません。

1つの簡単な微妙な変更で、次のことが修正できます。

static myclass & getinstance()
{
    static myclass a;
    return a;
}
于 2012-09-26T16:12:09.980 に答える
1

a最初のケースでは、オブジェクトのコピーを返します。2番目にあなたはそれにポインタを返しています。したがって、最初の関数はシングルトンをマルチトンに変換します

また、ポインターの代わりに参照を返すように2番目を変更します。

static myclass& getinstance()
{
    static myclass a;
    return a;
}

編集後、コピーではなく、最初の関数で静的オブジェクトへの参照を返しているように見えます。この場合、関数の呼び出し元が2番目の場合にポインターを逆参照する必要があることを除いて、違いはありません。

経験則として、nullptr入力/戻り値を処理できるようにしたい場合を除いて、常に参照を受け入れる/返す。

于 2012-09-26T16:12:49.820 に答える
1

参照により戻ることをお勧めします。

これは、オブジェクトの所有者が誰であるかについて混乱が生じることがないためです。ポインタで戻ると、所有権のセマンティクスが明確でないため、ユーザーはポインタを削除する必要があると誤って考える可能性があります。

于 2012-09-26T16:16:19.857 に答える