【コードあり】シングルトンパターンのC++版サンプルコード

勉強

今回はデザインパターンのシングルトンパターンのサンプルコードを作成しました。

記事の作成に当たってインプットには以下の書籍やサイトを使って勉強しました。

間違い等あればコメントしてもらえると対応します。

シングルトンパターンの概要

シングルトンパターンは、特定のクラスがインスタンス化される際に、そのクラスのインスタンスが必ず1つしか生成されないようにします。

シングルトンパターンの実装方法は、クラス内にプライベートな静的メンバ変数を持ち、そのクラスの唯一のインスタンスへのアクセスを提供するパブリックな静的メソッドを提供することです。この静的メソッドを通じて、常に同じインスタンスにアクセスできます。

ただし、シングルトンパターンは、適切に使用しないと問題を引き起こす可能性があります。特に、マルチスレッド環境での利用時には、競合状態やパフォーマンスの低下などの問題が発生する可能性があるため、シングルトンの実装には慎重さが必要です。

構造はrefactoring.guruの図がわかりやすいのでそれ見て下さい。

c++のサンプルコード

シングルトンクラス(singleton.h)

#include <iostream>
#include <thread>
#include <mutex>

class Singleton {
public:
    // シングルトンインスタンスを取得する静的メソッド
    static Singleton& getInstance() {
        // インスタンスがまだ作成されていない場合は作成する
        // 二重ロックパターンを使うことでスレッドセーフにする
        if (!instance) {
            std::lock_guard<std::mutex> lock(mutex_);
            if (!instance) {
                instance = new Singleton();
            }
        }
        return *instance;
    }

    // ログを出力するメソッド
    void log(const std::string& message) {
        std::cout << "[LOG] " << message << std::endl;
    }

private:
    // プライベートコンストラクタ
    Singleton() {}

    // 静的メンバー変数
    static Singleton* instance;

    // インスタンス化のためのmutex
    static std::mutex mutex_;
};

Main関数(main.cpp)

#include "singleton.h"


// 静的メンバー変数の初期化
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex_;


int main() {
    // シングルトンインスタンスを取得して利用する
    Singleton& singleton = Singleton::getInstance();
    singleton.log("Hello, Singleton!");
    return 0;
}

サンプルコードの実行結果

実行結果は以下のようになります

[LOG] Hello, Singleton!

[topic color=”green” title=”関連記事”] [kanren url=”https://www.wata-blog.xyz/rare-subscription-matome/”] [kanren url=”https://www.wata-blog.xyz/manga_ikkiyomi_16/”] [kanren url=”https://www.wata-blog.xyz/daigakusei_blog_tuki5keta/”]

その他おすすめの記事[/topic]

コメント

タイトルとURLをコピーしました