シングルトンパターンは、デザインパターンがさっぱりわからないプログラマーでも聞いた事があるかもしれないくらい有名であるにもかかわらず、真面目に実装しようと思うと様々な問題が発生してしまいます。 具体的には、 static変数の初期化順序が未定義であるために、予期せぬ値を参照してしまう。 複数のスレッドから同時に初期化処理を行なった際、適切な同期を行なえない。 シングルトンクラスのコンストラクタでシングルトンを参照した際、無限ループが発生する。 このうち最後だけはどうにもなりませんので何とか気をつけることとして、他の2つはできれば「シングルトン基底クラス」的なクラスを継承すれば自動的にどうにかしてくれる……というのが理想的です。 なので作ってみました。 #include <memory> template <class T> class Singleton { public : static
![これでほぼ完璧! C++シングルトン基底クラスの決定版! - 株式会社CFlatの明後日スタイルのブログ](https://cdn-ak-scissors.b.st-hatena.com/image/square/6e9cef00907ab40d4872e9776f4ffd4925bc100a/height=288;version=1;width=512/http%3A%2F%2Fecx.images-amazon.com%2Fimages%2FI%2F51k0udCitAL.jpg)