ホームページ >バックエンド開発 >C++ >シングルトン設計パターンを C で実装するにはどうすればよいですか?

シングルトン設計パターンを C で実装するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-03 17:57:02382ブラウズ

How to Implement the Singleton Design Pattern in C  ?

C のシングルトン

C では、シングルトン設計パターンを実装する方法がいくつかあります。これは、クラスに単一のインスタンス。シングルトン クラスを作成するための 2 つの一般的なアプローチは次のとおりです。

ポインターを返す従来のシングルトン

このメソッドでは、シングルトン クラスはそのインスタンスへのポインターを返します。

<code class="cpp">class A {
    private:
        static A* m_pA;
        A();
        virtual ~A();

    public:
        static A* GetInstance();
        static void FreeInstance();
        
        void WORK1();
        void WORK2();
        void WORK3();
};</code>

ただし、オブジェクトに参照がまだあるときに FreeInstance() メソッドが呼び出された場合、このアプローチには潜在的な問題があります。これに対処するには、シングルトン オブジェクトを手動で解放しないようにします。

参照を返すシングルトン

シングルトンを参照として返すことは、安全性を高めるもう 1 つのアプローチです。

<code class="cpp">class A {
    private:
        static A* m_pA;
        explicit A();
        void A(const A& a);
        void A(A &a);
        const A& operator=(const A& a);
        virtual ~A();

    public:
        static A* GetInstance();
        static void FreeInstance();
        
        void WORK1();
        void WORK2();
        void WORK3();
};</code>

この実装により、Singleton オブジェクトを誤って破棄することがなくなります。

その他の考慮事項

  • 直接アクセスできないようにコンストラクターをプライベートにします。オブジェクトの作成。
  • デフォルトのコピー コンストラクターと代入演算子をオーバーライドして、コピーを防止します。
  • 静的メソッドを使用してシングルトン インスタンスにアクセスし、作成と破棄が 1 回だけ保証されます。

シングルトン設計の詳細とベスト プラクティスについては、推奨リソースを参照してください:

  • [シングルトン: どのように使用すべきか](https://refactoring.guru/design-patterns /singleton)
  • [C シングルトン デザイン パターン](https://www.learncpp.com/cpp-tutorial/singleton-design-pattern/)

以上がシングルトン設計パターンを C で実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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