「C++のデザインパターン - シングルトン」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
 
160行目: 160行目:
* nullポインタチェックが不要
* nullポインタチェックが不要
* デストラクタの明示的実装が不要
* デストラクタの明示的実装が不要
* 遅延初期化 (lazy initialization) の実現
* より安全で簡潔な実装
* より安全で簡潔な実装
<br>
<br>
166行目: 167行目:
  {
  {
  private:
  private:
     Singleton() = default;
     Singleton() = default; // プライベートコンストラクタ (外部からのインスタンス化を防止)
   
   
  public:
  public:
     Singleton(const Singleton&)            = delete;
     Singleton(const Singleton&)            = delete; // コピーコンストラクタを削除 (シングルトンの複製を防止)
     Singleton& operator=(const Singleton&) = delete;
     Singleton& operator=(const Singleton&) = delete; // 代入演算子を削除 (シングルトンの代入を防止)
   
   
    // C++11以降では、静的局所変数の初期化はスレッドセーフであることが保証されている
     static Singleton& getInstance()
     static Singleton& getInstance()
     {
     {
       static Singleton instance;
       static Singleton instance; // マルチスレッド環境でも安全
       return instance;
       return instance;
    }
    // ビジネスロジックメソッド
    void sampleMethod()
    {
      // ...略
     }
     }
  };
  };
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// 使用例
#include <iostream>
int main()
{
    // インスタンスの取得
    Singleton& instance1 = Singleton::getInstance();
    Singleton& instance2 = Singleton::getInstance();
    // 同じインスタンスであることを確認
    if (&instance1 == &instance2) {
      std::cout << "同じインスタンスです" << std::endl;
    }
    // ビジネスロジックの実行
    instance1.sampleMethod();
    return 0;
}
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>

案内メニュー