ゲームBGMをすこれ

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

WRITER
 

本ページはプロモーションが含まれています

スポンサードリンク



本ページはプロモーションが含まれています

この記事を書いている人 - WRITER -
ゲーム音楽をこよなく愛するものです。 このブログではゲーム音楽に関する記事や大学生活に関する記事、ブログに関する記事を紹介します。 超絶田舎の地方国立大学に通ってます。週1くらいで更新してるので暇なときに見に来てください。たまに面白い記事書いてます。彼女募集中!!←≪重要≫  
詳しいプロフィールはこちら

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

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

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

目次

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

シングルトンパターンは、特定のクラスがインスタンス化される際に、そのクラスのインスタンスが必ず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!
この記事を書いている人 - WRITER -
ゲーム音楽をこよなく愛するものです。 このブログではゲーム音楽に関する記事や大学生活に関する記事、ブログに関する記事を紹介します。 超絶田舎の地方国立大学に通ってます。週1くらいで更新してるので暇なときに見に来てください。たまに面白い記事書いてます。彼女募集中!!←≪重要≫  
詳しいプロフィールはこちら

- Comments -

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Copyright© WATA-BLOG(わたブログ) , 2024 All Rights Reserved.