ホームページ  >  記事  >  バックエンド開発  >  C シングルトン実装では参照を返すことが好ましいのはなぜですか?

C シングルトン実装では参照を返すことが好ましいのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 21:50:301003ブラウズ

Why is Returning a Reference Preferred for C   Singleton Implementation?

C シングルトンの例

C では、シングルトン パターンにより、プログラムの実行全体を通じてクラスのインスタンスが 1 つだけであることが保証されます。シングルトン実装の改良されたサンプルを次に示します:

<code class="cpp">class A {
private:
    static A* m_pA;
    explicit A(); // Constructor should be private
    A(const A&) = delete; // Prevent copying
    A& operator=(const A&) = delete; // Prevent assignment
    virtual ~A(); // Destructor

public:
    static A& GetInstance(); // Return a reference to the instance
    static void FreeInstance(); // Free the instance when no longer needed

    void WORK1();
    void WORK2();
    void WORK3();
};

A& A::GetInstance() {
    if (m_pA == nullptr) {
        static A instance; // Lazy initialization
        m_pA = &instance;
    }
    return *m_pA; // Return a reference to the instance
}

void A::FreeInstance() {
    delete m_pA;
    m_pA = nullptr;
}</code>

ディスカッション:

なぜポインターを返さないのか?

提供されているサンプル コードは、最初に Singleton インスタンスへのポインターを返します。ただし、参照を返すことは、インスタンスの手動割り当て解除を防ぐため、シングルトンに適していると考えられます。オブジェクトの有効期間は、Singleton クラス自体によって管理される必要があります。

遅延初期化:

改良されたサンプルでは、​​関数メソッドによって初期化される静的変数を使用して、遅延初期化を実現します。この手法により、必要な場合にのみシングルトンが作成されるようになり、効率が向上します。

保証された破壊:

参照を返すことにより、シングルトンはインスタンスが確実に作成されるようにします。早期に破壊されません。また、シングルトンへの参照が自動的に解放されるため、プログラムの終了時に適切な破棄が行われます。

追加メモ:

  • コンストラクターは次のようにする必要があります。オブジェクトの直接作成を防ぐために、プライベートとして宣言されています。
  • 単一インスタンスを強制するには、コピー コンストラクターと代入演算子を明示的に削除する必要があります。
  • 必要に応じて派生クラスを適切に破棄できるように、デストラクターは仮想である必要があります。

以上がC シングルトン実装では参照を返すことが好ましいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。