单例模式定义
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
代码:
class Singleton {
public:
static Singleton& getInstance(){
static Singleton instance;
return instance;
}
private:
Singleton ()= default;
~Singleton ()= default;
Singleton (const Singleton &)= delete;
Singleton & operator=(const Singleton &)= delete;
};
问题:
单例模式其实就是一个复杂的全局对象,并不会因为使用了设计模式而消去全局变量的种种弊端,例如无法复用、线程安全等问题
可测试性
你无法孤立地测试你的实体。如果单元不存在,那么单元测试也将不存在。你只能进行系统测试。实体的执行效果要依赖整个系统的状态。重构
因为你无法孤立地对代码进行推理,重构它会相当有挑战。
优化
你无法轻易地重新安排函数的调用或者在不同的线程上进行函数调用,因为可能有隐藏的依赖。缓存之前的函数调用结果也极为危险。并发产生数据竞争的必要条件是有共享而可变的状态,而非const全局变量正是共享而可变的。
一些单例需求的替代方案:
在C++中,不可变的全局对象可以考虑用const或者常量表达式。文章来源:https://www.toymoban.com/news/detail-726924.html
思考:
- 设计模式是一种策略,但是不同的语言有不同的特性,可能某些语言中并不需要单独编写单例类就可以实现单例模式。Java显然是需要单例模式的
参考链接:
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-singleton
https://www.zhihu.com/question/50533404文章来源地址https://www.toymoban.com/news/detail-726924.html
到了这里,关于c++中单例模式的实现和问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!