点击查看代码
#include <iostream>
class Singleton {
private:
// 私有化构造函数,防止外部实例化
Singleton() {
std::cout << "Singleton Instance Created!" << std::endl;
}
// 删除拷贝构造函数和赋值运算符,防止拷贝实例
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
// 提供一个全局访问点,返回唯一实例
static Singleton& getInstance() {
static Singleton instance; // 静态局部变量,第一次调用时创建实例
return instance;
}
void showMessage() {
std::cout << "Hello from Singleton!" << std::endl;
}
};
int main() {
// 获取Singleton的唯一实例并调用方法
Singleton& singleton1 = Singleton::getInstance();
singleton1.showMessage();
// 再次获取实例
Singleton& singleton2 = Singleton::getInstance();
// 检查两个实例是否相同
if (&singleton1 == &singleton2) {
std::cout << "singleton1 and singleton2 are the same instance." << std::endl;
} else {
std::cout << "singleton1 and singleton2 are different instances." << std::endl;
}
return 0;
}
单例设计模式与我之前学习的C++代码都有所不同:
1、为了防止外部随意实例化对象,类的构造函数和析构函数采用了private访问修饰符。
2、getInstance()方法中的静态局部变量instance在第一次调用时创建,并在程序的生命周期中存在。(C++11及以后的标准中保证线程安全的懒汉式单例模式)
3、删除了拷贝构造函数和operator=,防止用户意外调用拷贝构造函数创造新的实例。