私はこのようなシングルトンを使用します:
Singleton* single = Singleton::instance();
single->do_it();
私はこのような名前のないクラスを使用します:
single.do_it();
シングルトンパターンには、読み取り可能なエラーメッセージがあること以外に、名前のないクラスに勝る利点はないように感じます。シングルトンの使用は、名前のないクラスオブジェクトを使用するよりも扱いにくいです。まず、クライアントは最初にインスタンスのハンドルを取得する必要があります。第二に、の実装者はSingleton::instance()
並行性を考慮する必要があるかもしれません。
では、なぜ、どのようにして、名前のないクラスよりもシングルトンを選択するのでしょうか。
補遺として、名前のないクラスの明白な定義は
class {
// ...
}single;
私はそれを次のように定義することもできます:
#ifndef NDEBUG
class Singleton__ { // readable error messages,
#else
class { // unnamed, clients can't instantiate
#endif
// ...
}single;
後者のアプローチには、読み取り可能なコンパイラエラーメッセージの利点がありますが、デバッグモードではシングルトンではありません。