ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

相对完善的单例模式

2022-06-11 21:35:45  阅读:171  来源: 互联网

标签:Singleton return GetInstance 完善 模式 static 单例 mThis


相对完善的单例模式

关于单例模式相比无须赘言,但是初学设计模式的时候都难免遇到使用单例模式时没有考虑拷贝构造的问题。
这里就尝试实现几个相对完善而且有扩展性的单例模式,以供参考。

Hello World 版本

class Singleton {
public:
Singleton *GetInstance() {
    if (mThis != NULL)
	return mThis;
	mThis = new Singleton;
}
private:
    static Singleton *mThis;
    Singleton() {}
};

更完善的版本

一个完善的类应该考虑拷贝构造的问题,所以更完善的版本就呼之欲出了:

class Singleton {
public:
Singleton *GetInstance() {
    if (mThis != NULL)
        return mThis;
	mThis = new Singleton;
}
private:
    static Singleton *mThis;
    Singleton() {}
    Singleton(Singleton &obj) {/* ... */} // 处理好拷贝构造的问题
};

更简洁的版本

如果你恰好和我一样,知道一些C++11的知识,那么就可以这么做

class Singleton {
public:
Singleton *GetInstance() {
    if (mThis != nullptr)
        return mThis;
	mThis = new Singleton;
}
private:
    static Singleton *mThis;
    Singleton() {}
    Singleton(Singleton &obj) = delete; // 利用C++11的特性的版本
};

考虑扩展性的版本

如果你恰好和我一样,会考虑扩展性的问题,那么就可以这么做

template <typename T>
class Singleton {
public:
template <typename T>
Singleton<T> *GetInstance() {
    if (mThis != NULL)
        return mThis;
    mThis = new Singleton<T>;
}
private:
    static Singleton<T> *mThis;
    Singleton<T>() {}
    Singleton<T>(Singleton &obj) = delete;  
};

结束语

这个题目的讨论就结束了。
至于关于单例模式的其他优化方式,什么饿汉什么线程的,前人已经讨论了很多了。
在这里只讨论我的想法。

创作不易,如需转载请附上原始url:https://www.cnblogs.com/leoTsou/p/16366818.html

标签:Singleton,return,GetInstance,完善,模式,static,单例,mThis
来源: https://www.cnblogs.com/leoTsou/p/16366818.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有