Skip to content

单例模式

区别

  • 创建时机
    • 懒汉模式是指针,调用getInstance的时候才会创建对象
    • 饿汉模式是静态成员,在数据段创建的(程序启动时就创建了对象)
  • 线程安全
    • 饿汉安全

示例

ts
class Singleton {
private:
    static Singleton* instance;
    
    // 私有构造函数,防止外部创建
    Singleton() {
        std::cout << "Singleton created\n";
    }
    
    // 禁用拷贝和赋值
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
    
public:
    static Singleton* getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
    
    void showMessage() {
        std::cout << "Hello from Singleton!\n";
    }
    
    ~Singleton() {
        std::cout << "Singleton destroyed\n";
    }
};

// 静态成员初始化
Singleton* Singleton::instance = nullptr;
js
class EagerSingleton {
private:
    static EagerSingleton instance;
    
    EagerSingleton() {
        std::cout << "EagerSingleton created at program start\n";
    }
    
    EagerSingleton(const EagerSingleton&) = delete;
    EagerSingleton& operator=(const EagerSingleton&) = delete;
    
public:
    static EagerSingleton& getInstance() {
        return instance;  // 直接返回引用
    }
    
    void showMessage() {
        std::cout << "Hello from EagerSingleton!\n";
    }
    
    ~EagerSingleton() {
        std::cout << "EagerSingleton destroyed\n";
    }
};

// 程序启动时就创建实例(静态初始化)
EagerSingleton EagerSingleton::instance;
最近更新