单例模式
定位
创建型设计模式
资源管理型模式
核心原理
静态成员和函数可以通过类名加作用域符访问。
构造函数私有化,并显式删除拷贝构造和移动构造,确保外部无法实例化对象。
类内部有个唯一实例化对象,外部在获取实例时,先判断实例化对象是否为空,再决定是否构造。
声明
#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;
}

浙公网安备 33010602011771号