一引言
cocos2d-x的导演类等有shared关键词方法获得的为单例类,就是整个程序就那么一个类的实例,对我这个菜鸟来说,真不会用c++写单例类。
今天参考了下百度
二 代码
#include <iostream>
using namespace std;
class Csingle
{
public:
static Csingle* getSingle();
private:
Csingle(){};
static Csingle *m_pSingle;
};
Csingle* Csingle::m_pSingle = NULL;
Csingle* Csingle::getSingle()
{
if (m_pSingle==NULL)
m_pSingle=new Csingle();
return m_pSingle;
}
void main()
{
Csingle *p=Csingle::getSingle();
getchar();
getchar();
}
红字部分是静态成员初始化,很重要。我就是少了那一个语句老是报错,摸不到头绪,现在恍然大悟!
报错如下:
error LNK2001: 无法解析的外部符号 "private: static class Csingle * Csingle::m_pSingle" (?m_pSingle@Csingle@@0PAV1@A)
三 分析
原理很简单,
1.声明静态的类成员变量,存放那个唯一的实例。
2.用类静态函数创建,然后返回,当然先判断存在否,如果存在就还返回已经存在的那个。
3.最重要的是把构造函数给private了,这样就new不出新实例来了,只能是通过提供的接口函数来获得类的实例对象