C++のシングルトンデザインパターンの実装方法は何ですか?
C++でシングルトンパターンを実装する方法は複数ありますが、よく使われる2つの方法を以下に示します。
- Singletonパターン:
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
饿汉式单例模式中,实例在程序启动时已经创建好,getInstance()方法会直接返回该实例。需要延迟实例化时,可以在getInstance()方法中进行判断和实例化。
- 怠け者のシングルトンパターン:
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
懒漢式のシングルトンパターンでは、getInstance()メソッドが最初に呼び出された時にのみインスタンスが作成されるため、マルチスレッド環境でのスレッドセーフ性に注意する必要があります。ロックメカニズムやダブルチェックロックメカニズムを使用してスレッドセーフ性を確保できます。
注意すべき点は、上記の2つの方法のいずれも、デフォルトのコンストラクタをプライベートに設定する必要があるということです。それにより、他の場所で直接オブジェクトをインスタンス化することを防ぐことができます。