えちえち☆だんせーき!アニメ大好き社会人のロコリンのブログ。2015年卒(修士)の社会人。学生時代(2010年)から続けてるブログなのでエントリによっては学生ブログと社会人ブログになっています。時系列から察して。
|
|||||||||||||||||
|
|||||||||||||||||
このブログについて
ブログ内検索
カテゴリ
プロフィール
外部リンク
Twitter
|
今『増補改訂版 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 検索
|
|||||||||||||||
copyright © 2008 えちえち☆だんせーき! all rights reserved.
Designed by チラシ広告作成ナビ
|