C++学习随笔——简单的单例设计模式实例
点击查看代码
#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=,防止用户意外调用拷贝构造函数创造新的实例。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了