シングルトンパターン in C++
ふっ、とうとうここまでたどり着いてしまったか
そうだ、この私がシングルトンパターンだ!
*クラスを勉強し始めた人向けです
あっはい
どうもLyです
シングルトン便利です、ω、
シングルトンの利点はクラスのインスタンス(クラス内のデータ)を
グローバルと同じように扱えること
あとはそのクラスが唯一になること
始めにSingletonクラスを宣言してみましょう
class Singleton {}; int main() { Singleton singleton; // このままではSingletonクラスを複製できてしまう // Singleton singleton2; }
クラスが宣言されたとき呼ばれるのは
コンストラクタです
クラスと同じ名前の関数です
基本的にこのコンストラクタでデータの初期化をしますね
class Singleton { public: Singleton(){} // ←こいつですね };
では、さきほどのようにコンストラクタを書かない場合どうなるのか
それはコンパイラが勝手にpublicな空間に作成してくれます
コンストラクタはクラスが宣言されたとき呼ばれます
逆にコンストラクタが無いと宣言が出来なくなります
// コンストラクタをprivateに置く class Singleton { private: Singleton(){} }; int main() { Singleton singleton; // err }
クラスが宣言できないとそもそもクラスにアクセスできない!
というわけでもなく
クラスのpublicな空間にstaticな関数をおけば実はアクセスできます
class Singleton { private: Singleton(){} public: static Singleton& getInstance { static Singleton singleton; return singleton; } };
やっていることはいたって単純で
クラスの中でクラスを作成しているだけです
そして作成したクラスを出力する関数を作っています
クラスのデータにアクセスする場合は
こんな風にアクセスします
int main() {
Singleton::getInstance();
}
Singleton::getInstance()
これは
getInstance関数の中で宣言されたsingletonと同等です
なので、例えばPlayerクラスをシングルトンにした場合
class Player { private: Player(){} Vector2f pos; public: static Player& getInstance() { static Player player; return player; } Vector2f getPos() { return pos; } }; int main() { Vector2f player_pos; player_pos = Player::getInstance().getPos(); std::cout << "プレイヤーの現在地 x(" << player_pos.x << ") y(" << player_pos.y << ") \n"; }
という風にアクセスします
Hello Hatena Blog!
。ω。っは!?
ここはどこだ!
この男の名はLy
本名を梁井(ヤナイ)亮(アキラ)と呼ぶ
Lyというのはネトゲで使っている名前である
Lyはゲームプログラム専門学校に通っている
普段は部屋に引きこもっているゲーマーである
ちなみにPSO2やってます(10鯖です、ω、)
3年制で現在2年生のLyは最近
Cinderというライブラリを使って作成したゲームが
審査会(他で言うところの期末テスト=期末審査会)で
優秀賞をもらったので浮かれているところだ
Youtubeにあげてたりもする((よかったら見てやってください、ω、www.youtube.com
GetSpeed(上の作品)のソースコードはGitで公開しているgithub.com
((よかったら見ていってね、ω、
なんか物語風自己紹介してみた
#include <iostream> int main() { std::cout << "Hello Hatena Blog!"; }