Qt 单例模式的实现
📅 2026/7/2 17:45:32
👁️ 阅读次数
📝 编程学习
1、静态对象
static MyClass* MyClass::Instance()
{
static MyClass inst;
return &inst;
}
过去很长一段时间一直都这么写,简单粗暴有效。但是直接声明静态对象会使编译出的可执行文件增大,也有可能出现其他的一些问题,所以利用了Qt自带的智能指针QScopedPointer和线程锁QMutex,改成了需要时才动态初始化的模式:
2、动态初始化
static MyClass* MyClass::Instance()
{
static QMutex mutex;
static QScopedPointer<MyClass> inst;
if (Q_UNLIKELY(!inst)) {
mutex.lock();
if (!inst) {
inst.reset(new MyClass);
}
mutex.unlock();
}
return inst.data();
}
既保证了线程安全又防止了内存泄漏,效率也没降低太多,简直完美。
可惜每次都要重复这么几行实在麻烦,于是写了一个模板类:
3、模板类
使用时:MyClass* inst = Singleton<MyClass>::Instance();
编程学习
技术分享
实战经验