fc2ブログ
 

えちえち☆だんせーき!

アニメ大好き社会人のロコリンのブログ。2015年卒(修士)の社会人。学生時代(2010年)から続けてるブログなのでエントリによっては学生ブログと社会人ブログになっています。時系列から察して。
 
 
このブログについて
ブログ内検索
カテゴリ
プロフィール

ロコリン

Author:ロコリン
2018年6月から会社員。2015年3月まで大学院生でした。
趣味:アニメ/Twitter/ゲーム/ニコ動
今(2015年2月更新):プリキュア/プリパラ/アイカツ/ごちうさ/艦これ

外部リンク
Twitter

C++ での Singleton パターンの実装法 

今『増補改訂版 Java 言語で学ぶデザインパターン入門』という本を読んでいます。そこで、Singleton パターンというのが出ました。Singleton パターンとは、プログラム中で 1 個しかインスタンスを生成できないようなクラスのパターンです。後で UML によるクラス図を描いて原理を説明したいです。

これを C++ で実装するにはどうすればいいのかなぁと思っています。Java などの普通のオブジェクト指向言語ではガベージコレクションがありますから、new でインスタンスを生成するのは普通のことです。一方、C++ では new で生成されたインスタンスは delete しないと消えません。なので、なるべく new を使いたくないと思いました。とりあえず私が思いついた方法を示します。

singleton.hpp

#ifndef	SINGLETON_HPP	// インクルードガード
#define	SINGLETON_HPP

class Singleton {
public:
	static Singleton *getInstance();	// インスタンスのポインタを得るメソッド
private:
	Singleton();	// テスト用コンストラクタ
};

#endif	// SINGLETON_HPP

singleton.cpp

#include "singleton.hpp"
#include <iostream>

Singleton *Singleton::getInstance()
{
	static Singleton singleton;	// インスタンスの生成 (初回呼び出し時のみ)
	return &singleton;
}

Singleton::Singleton()
{
	std::cout << "インスタンスが生成されました。" << std::endl;
}

main.cpp

#include <iostream>
#include "singleton.hpp"

int main()
{
	std::cout << "Start." << std::endl;
	Singleton *obj1 = Singleton::getInstance();	// インスタンスのポインタを得る (初回呼び出しなのでこのときインスタンスが生成される)
	Singleton *obj2 = Singleton::getInstance();	// インスタンスのポインタを得る (2 回目以降は新しいインスタンスは生成されない)
	if (obj1 == obj2) {
		std::cout << "obj1 と obj2 は同じインスタンスです。" << std::endl;
	} else {
		std::cout << "obj1 と obj2 は同じインスタンスではありません。" << std::endl;
	}
	std::cout << "End." << std::endl;
	return 0;
}

実行結果

Start.
インスタンスが生成されました。
obj1 と obj2 は同じインスタンスです。
End.

ということで C++ での Singleton パターンの実装に成功したのかもしれません。

コメント















 管理者にだけ表示を許可する

トラックバック
 
https://rexpit.blog.fc2.com/tb.php/61-01980e31
最新記事
最新コメント
FC2カウンター
欲しい
最近買ったもの
Amazon 検索