c++ 单例模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 单例模式相关的知识,希望对你有一定的参考价值。

  一般情况下,当我们建立一些工具性质的类的时候,通常不用存储太多跟自身有关的数据。在这种情况下,每次都去new一个对象,既增加了开销,也使得代码显得臃肿。其实,此时我们只需要一个实例对象就可以。

  而使用全局变量或者静态变量的方式,会影响封装性,难以保证其他代码不会对全局变量产生影响。

  考虑到这些影响,可以将默认构造函数声明为私有的,这样就不会被外部所new了,甚至可以把析构函数也设置为私有的,这样就只有我们自己可以删除自己了。 

singleton.h

技术分享
 1 #ifndef _CSINGLETON_H_
 2 #define _CSINGLETON_H_
 3 
 4 class    CSingleton
 5 {
 6 public:
 7     static    CSingleton&    GetInstance();
 8     static    int init();
 9     void    DoSomething();//For Test
10 private:
11     CSingleton();
12     //拷贝构造函数和"="操作符也设为私有,防止被复制
13     CSingleton(const CSingleton&);
14     CSingleton&    operator=(const CSingleton&);
15 
16     static    CSingleton    *m_pInstance;
17 };
18 
19 #endif
View Code

singleton.cpp

技术分享
 1 #include "Singleton.h"
 2 #include <assert.h>
 3 #include <iostream>
 4 using namespace std;
 5 
 6 CSingleton* CSingleton::m_pInstance = NULL;
 7 
 8 CSingleton::CSingleton()
 9 {
10 }
11 
12 CSingleton::CSingleton(const CSingleton&)
13 {
14 }
15 
16 CSingleton&    CSingleton::GetInstance()
17 {
18     assert(NULL != m_pInstance);
19     return *m_pInstance;
20 }
21 
22 int CSingleton::init()
23 {
24     assert(NULL == m_pInstance);
25     try
26     {
27         m_pInstance = new CSingleton;
28 
29         cout << "Succeed to init CSingleton." << endl;
30         return true;
31     }
32     catch(...)
33     {
34         m_pInstance = NULL;
35         return false;
36     }
37 }
38 
39 void CSingleton::DoSomething()
40 {
41     cout << "Succeed to do something." << endl;
42 }
View Code

main.cpp

技术分享
 1 #include <iostream>
 2 #include "Singleton.h"
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     if(true != CSingleton::init())
 8     {
 9         cout << "Init CSingleton fail." << endl;
10         return -1;
11     }
12     
13     CSingleton::GetInstance().DoSomething();
14 
15     return 0;
16 }
View Code

结果如下:

技术分享

以上是关于c++ 单例模式的主要内容,如果未能解决你的问题,请参考以下文章

C++设计模式:单例模式

C++ 安全单例模式总结

设计模式--单例模式C++实现

C++特殊类设计(单例模式)

C++ 单例模式(singleton)

C++ 单例模式(singleton)