C++シングルトンパターン
1.コンセプト:
シングルトン パターンでは、クラスにインスタンスが 1 つだけ存在することが保証され、そのインスタンスを取得するためのグローバル アクセス ポイントが提供されます。これは通常、クラスのコンストラクターをプライベートにして外部からの直接インスタンス化を防ぎ、インスタンスを取得する静的メソッドを提供することによって行われます。
2.実装方法:
シングルトン パターンを実装する主な手順は次のとおりです。
① クラスのコンストラクターとコピー コンストラクターをプライベートとして宣言し、外部で直接インスタンス化されないようにします。
② シングルトンインスタンスを保存するための静的プライベートメンバー変数を提供します。
③ シングルトンインスタンスの取得に使用する静的パブリックメソッドを提供します。インスタンスが存在しない場合はインスタンスを作成して戻り、インスタンスがすでに存在する場合は直接戻ります。
3. コード例:
#include <iostream>
#include <mutex>
using namespace std;
class Singleton {
private:
// 私有静态成员变量,用于保存单例实例
static Singleton* instance;
static mutex mtx; // 用于线程安全的互斥锁
// 私有构造函数,防止外部实例化
Singleton() {
}
// 拷贝构造私有化,防止外部实例化
Singleton(const Singleton& obj) {
}
public:
// 静态方法,用于获取单例实例
static Singleton* getInstance() {
lock_guard<mutex> lock(mtx); // 线程安全的锁定
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
void showMessage() {
cout << "Hello from Singleton!" << endl; }
};
// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
mutex Singleton::mtx;
int main() {
Singleton* singleton1 = Singleton::getInstance();
singleton1->showMessage();
Singleton* singleton2 = Singleton::getInstance();
singleton2->showMessage();
// 两个实例是同一个,只有一个实例被创建
if (singleton1 == singleton2) {
cout << "Both instances are the same." << endl;
}
return 0;
}