温馨提示×

c++单例模式怎么写

c++
小亿
89
2024-01-19 09:16:16
栏目: 编程语言

在C++中实现单例模式可以通过以下方式来实现:

class Singleton {
private:
    // 私有构造函数,防止外部创建对象
    Singleton() {}

    // 静态私有成员变量,用于保存单例对象
    static Singleton* instance;

public:
    // 静态公有成员函数,用于获取单例对象
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};

// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;

在这个实现中,通过将构造函数设置为私有,可以防止外部直接创建对象。通过静态成员变量和静态成员函数,可以实现全局唯一的单例对象,并通过getInstance函数来获取该对象。

需要注意的是,这个实现是简单的懒汉式单例模式,只有在第一次调用getInstance函数时才会创建对象。如果需要线程安全,可以使用锁来保证只有一个线程可以创建对象。

class Singleton {
private:
    // 私有构造函数,防止外部创建对象
    Singleton() {}

    // 静态私有成员变量,用于保存单例对象
    static Singleton* instance;
    
    // 静态私有成员变量,用于加锁
    static std::mutex mtx;

public:
    // 静态公有成员函数,用于获取单例对象
    static Singleton* getInstance() {
        if (instance == nullptr) {
            std::lock_guard<std::mutex> lock(mtx);
            if (instance == nullptr) {
                instance = new Singleton();
            }
        }
        return instance;
    }
};

// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;

在这个实现中,使用了std::mutex来实现线程安全。在第一次调用getInstance时,使用std::lock_guardmtx加锁,保证只有一个线程可以创建对象。

0