C ++シングルトンデザインパターン

アルテムバーガー

最近、C ++のシングルトンデザインパターンの実現/実装に出くわしました。それはこのように見えました(私は実際の例からそれを採用しました):

// a lot of methods are omitted here
class Singleton
{
   public:
       static Singleton* getInstance( );
       ~Singleton( );
   private:
       Singleton( );
       static Singleton* instance;
};

この宣言から、インスタンスフィールドがヒープで開始されていると推測できます。これは、メモリ割り当てがあることを意味します。私にとって完全に不明確なのは、いつメモリの割り当てが解除されるのかということです。または、バグとメモリリークがありますか?実装に問題があるようです。

私の主な質問は、どうすればそれを正しい方法で実装できるかということです。

マーティンヨーク

2008年に、遅延評価され、破壊が保証され、技術的にスレッドセーフではないシングルトンデザインパターンのC ++ 98実装を提供しました。C++
でシングルトンのサンプルを提供できる人はいますか?

これは、遅延評価され、正しく破棄され、スレッドセーフなシングルトンデザインパターンの更新されたC ++ 11実装です

class S
{
    public:
        static S& getInstance()
        {
            static S    instance; // Guaranteed to be destroyed.
                                  // Instantiated on first use.
            return instance;
        }
    private:
        S() {}                    // Constructor? (the {} brackets) are needed here.

        // C++ 03
        // ========
        // Don't forget to declare these two. You want to make sure they
        // are inaccessible(especially from outside), otherwise, you may accidentally get copies of
        // your singleton appearing.
        S(S const&);              // Don't Implement
        void operator=(S const&); // Don't implement

        // C++ 11
        // =======
        // We can use the better technique of deleting the methods
        // we don't want.
    public:
        S(S const&)               = delete;
        void operator=(S const&)  = delete;

        // Note: Scott Meyers mentions in his Effective Modern
        //       C++ book, that deleted functions should generally
        //       be public as it results in better error messages
        //       due to the compilers behavior to check accessibility
        //       before deleted status
};

シングルトンをいつ使用するかについては、この記事を参照してください:(頻繁ではありません)
シングルトン:どのように使用する必要がありますか

初期化順序とその対処方法については、次の2つの記事を参照してください。
静的変数の初期化順序
C ++の静的初期化順序の問題の検出

ライフタイムについて説明しているこの記事を参照してください:
C ++関数の静的変数のライフタイムはどれくらいですか?

シングルトンへのスレッドの影響について説明しているこの記事を参照してください
。GetInstanceメソッドの静的変数として宣言されたシングルトンインスタンス、スレッドセーフですか?

ダブルチェックロックがC ++で機能しない理由を説明するこの記事を参照してください
。C++プログラマーが知っておくべき一般的な未定義の動作は何ですか?
ドブス博士:C ++とダブルチェックロックの危険性:パートI

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ThreadStaticのC#シングルトンパターンデザイン

分類Dev

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

分類Dev

C#のインターフェイスでシングルトンパターンを使用する

分類Dev

プロトタイプデザインパターンの例(c ++)

分類Dev

C#のプロトタイプデザインパターン

分類Dev

デザインパターン:C ++抽象化レイヤー

分類Dev

静的クラスのC#シングルトンパターン?

分類Dev

複数のDLLを使用したc#シングルトンパターン

分類Dev

Objective-Cのオブジェクトデザインパターン

分類Dev

C#WPFバインディング値は、ユーザーコントロールでアニメーションをトリガーしません

分類Dev

Cでの契約デザインパターン

分類Dev

C#でのISPデザインパターンの実装

分類Dev

C#デザインパターンの提案が必要

分類Dev

C ++でのデータのマルチモデル分析のデザインパターン

分類Dev

コンストラクターのC ++シングルトン

分類Dev

C#Entity Framework / ASP.NETRESTおよびモデルのデザインパターンまたはソリューションアーキテクチャ

分類Dev

C ++共変パラメーター-デザインパターン

分類Dev

ユーザーコントロールC#のデザインタイムタスクを作成します

分類Dev

C ++でのオブザーバーデザインパターンの修正

分類Dev

PHPのシングルトンデザインパターン

分類Dev

デザインパターン:シングルトンの混乱

分類Dev

シングルトンデザインパターン

分類Dev

プロパティの代わりにパブリック 'インスタンス'フィールドを持つC#シングルトン

分類Dev

コピーとダウンキャストを回避するためのC ++デザインパターン

分類Dev

C ++インプレースデストラクタコンパイル警告

分類Dev

c#コマンドパターンデザインの問題

分類Dev

C ++ 11スタイルのシングルトンの初期化

分類Dev

ログインしたユーザーのC#リターンデータ

分類Dev

C#、Castle Windsor、およびコンポジットデザインパターン

Related 関連記事

  1. 1

    ThreadStaticのC#シングルトンパターンデザイン

  2. 2

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

  3. 3

    C#のインターフェイスでシングルトンパターンを使用する

  4. 4

    プロトタイプデザインパターンの例(c ++)

  5. 5

    C#のプロトタイプデザインパターン

  6. 6

    デザインパターン:C ++抽象化レイヤー

  7. 7

    静的クラスのC#シングルトンパターン?

  8. 8

    複数のDLLを使用したc#シングルトンパターン

  9. 9

    Objective-Cのオブジェクトデザインパターン

  10. 10

    C#WPFバインディング値は、ユーザーコントロールでアニメーションをトリガーしません

  11. 11

    Cでの契約デザインパターン

  12. 12

    C#でのISPデザインパターンの実装

  13. 13

    C#デザインパターンの提案が必要

  14. 14

    C ++でのデータのマルチモデル分析のデザインパターン

  15. 15

    コンストラクターのC ++シングルトン

  16. 16

    C#Entity Framework / ASP.NETRESTおよびモデルのデザインパターンまたはソリューションアーキテクチャ

  17. 17

    C ++共変パラメーター-デザインパターン

  18. 18

    ユーザーコントロールC#のデザインタイムタスクを作成します

  19. 19

    C ++でのオブザーバーデザインパターンの修正

  20. 20

    PHPのシングルトンデザインパターン

  21. 21

    デザインパターン:シングルトンの混乱

  22. 22

    シングルトンデザインパターン

  23. 23

    プロパティの代わりにパブリック 'インスタンス'フィールドを持つC#シングルトン

  24. 24

    コピーとダウンキャストを回避するためのC ++デザインパターン

  25. 25

    C ++インプレースデストラクタコンパイル警告

  26. 26

    c#コマンドパターンデザインの問題

  27. 27

    C ++ 11スタイルのシングルトンの初期化

  28. 28

    ログインしたユーザーのC#リターンデータ

  29. 29

    C#、Castle Windsor、およびコンポジットデザインパターン

ホットタグ

アーカイブ