单例模式是最简单也是比较常用的一个模式,通常用于资源的管理类。
C++实现单例模式很简单:
#include <iostream>
using namespace std;
class SingleObj
{
public:
static SingleObj& getInstance()
{
static SingleObj s_singleObj;
return s_singleObj;
}
private:
SingleObj() = default;
SingleObj(const SingleObj& s) = delete;
SingleObj(SingleObj&& s) = delete;
SingleObj& operator=(const SingleObj& s) = delete;
SingleObj& operator=(const SingleObj&& s) = delete;
~SingleObj() = default;
};
int main ()
{
SingleObj& singleObj1 = SingleObj::getInstance();
SingleObj& singleObj2 = SingleObj::getInstance();
cout<<&singleObj1<<endl;
cout<<&singleObj2<<endl;
return 0;
}
运行程序输出:
0x4030c0
0x4030c0可见对象singleObj1和singleObj2实际上对同一个对象的引用
以下几点说明:
1.在C++11之前,多线程环境下产生静态变量是线程不安全的,也就是多个线程可能会产生了多个静态变量;但是C++11后已经保证了静态变量生成的线程安全性。
2.用户可以根据需要定义构造函数,以供getInstance产生对象。
3.需要禁用拷贝构造,移动构造,赋值,移动赋值函数,毕竟只有单个实例,对单个实例调用这些函数是无道理的。
4.对于析构函数,因为对象不会在栈上创建,因此可以将其定义为private。
最后
以上就是高高果汁最近收集整理的关于设计模式:C++实现单例模式的全部内容,更多相关设计模式内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复