C++单例模式
单例模式(Singleton Pattern)是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这在需要控制某些资源的访问或需要在整个应用程序中共享一些配置信息时非常有用。
单例模式的特点
唯一性:单例类只有一个实例,确保所有对该类的访问都是对同一个对象的访问。
全局访问点:通过一个全局访问点,可以在程序的任何地方访问这个实例。
延迟初始化:实例通常是在第一次使用时创建,而不是在程序启动时创建。这可以节省资源。
单例模式的实现
私有化构造函数:防止其他代码直接使用构造函数创建实例。
私有化拷贝构造函数和赋值操作符:防止通过复制来创建新的实例。
静态方法获取实例:提供一个静态方法,返回唯一的实例。如果实例不存在,则在静态方法中创建它。
单例模式示例
#include
using namespace std;
class Singleton
{
private:
// 私有构造函数,防止外部实例化
Singleton() {
cout << "Singleton instance created." << endl;
}
// 静态指针,指向单例实例
static Singleton* instance;
public:
// 删除拷贝构造函数和赋值操作符,防止复制实例
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
// 静态方法,用于获取单例实例
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
// 示例方法
void showMessage() {
cout << "Hello, this is the Singleton instance!" << endl;
}
};
// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
int main() {
// 获取单例实例并调用其方法
Singleton* s1 = Singleton::getInstance();
s1->showMessage();
// 再次获取单例实例,验证其唯一性
Singleton* s2 = Singleton::getInstance();
s2->showMessage();
// 检查两个实例是否相同
if (s1 == s2) {
cout << "s1 and s2 are the same instance." << endl;
} else {
cout << "s1 and s2 are different instances." << endl;
}
return 0;
}
Tips:
- 私有化构造函数:Settings() 被声明为私有,以防止外部代码直接创建该类的实例。
- 静态实例指针:static Settings *sInstance; 用于存储类的唯一实例。
- 静态方法 getInstance:该方法检查 sInstance 是否为空,如果为空则创建一个新的实例,并返回该实例。这确保了整个应用程序中只有一个 Settings 实例。
- 删除拷贝构造函数和赋值操作符:通过 delete 拷贝构造函数和赋值操作符,防止创建类的副本。