创建单实例方法:
A:
class CSingleton
{
public:
static CSingleton* Instance()
{
if ( 0 == m_pInstance )
{
m_pInstance = new CSingleton;
}
return m_pInstance;
}
private:
static CSingleton* m_pInstance
};
B:
class CSingleton
{
public:
static CSingleton& Instance()
{
return m_instance;
}
private:
static CSingleton m_instance;
};
C:
class CSingleton
{
public:
static CSingleton& Instance()
{
static CSingleton instance;
return instance;
}
};
方法B不可取,因为static变量初始化顺序不确定,造成static变量之间初始化依赖的问题。
方法A、C在多线程环境下会产生竞态,构造函数将被调用多次。
使用double lock Checking方法来实现单实例,可以参考
阅读(426) | 评论(0) | 转发(0) |