单例模式

定位

创建型设计模式
资源管理型模式

核心原理

静态成员和函数可以通过类名加作用域符访问。
构造函数私有化,并显式删除拷贝构造和移动构造,确保外部无法实例化对象。
类内部有个唯一实例化对象,外部在获取实例时,先判断实例化对象是否为空,再决定是否构造。

声明

#ifndef SINGLETON_H
#define SINGLETON_H

class Singleton {
public:
    virtual ~Singleton();
    Singleton(Singleton &)                  = delete;               // 禁止左值拷贝构造
    Singleton(Singleton &&)                 = delete;               // 禁止右值拷贝构造
    Singleton &operator=(Singleton &)       = delete;               // 禁止左值拷贝赋值
    Singleton &operator=(Singleton &&)      = delete;               // 禁止右值拷贝赋值
    static Singleton *getInstance();                                // 获取实例
    void business();                                                // 业务逻辑
private:
    static Singleton                        *instance;              // 实例对象
    Singleton();
};

#endif

实现

#include <iostream>
#include "Singleton.h"

//实例化对象初始化
Singleton *Singleton::instance = nullptr;

Singleton::~Singleton() {
    if (instance) { delete instance; }
}

Singleton::Singleton() {}

// 获取实例
Singleton *Singleton::getInstance() {
    if (instance == nullptr) { instance = new Singleton(); }
    return instance;
}

// 业务逻辑
void Singleton::business() {
    std::cout << "这是业务逻辑" << std::endl;
}

使用示例

#include "Singleton.h"

int main() {
    // 创建实例
    Singleton * instance = Singleton::getInstance();
    // 执行业务逻辑
    instance->business();
    return 0;
}
posted @ 2026-03-22 17:05  SINGLERS  阅读(3)  评论(0)    收藏  举报