仪器社区

有谁帮忙写个C++的单体类

萌妹子606 2007-10-25
即定义一个类,这个类只能创建一个对象
评论
全部评论
萌系优质宠物
class MyClass
{
public:
static MyClass* GetInstance()
{
static BOOL bInit = FALSE;
if (bInit == FALSE)
{
bInit = TRUE;
m_pInstance = new MyClass();
}

return m_pInstance;
}
private:
MyClass() {}

static MyClass *m_pInstance;
};

MyClass* MyClass::m_pInstance = NULL;

根据上面这段代码,要想在程序中只许创建一个MyClass类对象,调用静态成员函数GetInstance()即可。
例如:

MyClass MyObj(); // 编译出错 - 因为构造函数是 private

// 获得指向类对象指针的正确方法
MyClass* pMyObj1 = MyClass::GetInstance();

// 下面的语句不会创建新的类对象,它所创建的对象指针pMyObj2与上面创建的pMyObj1指针是一样的,
// 也就是说pMyObj1和pMyObj2所指的对象是一样的

MyClass* pMyObj2 = MyClass::GetInstance();
1 0 2007-10-26 0条评论 回复
Xbyd9988
抓到了,楼上的专家没有考虑线程安全。
如果2个线程同时new,就会出现2个对象

static MyClass* GetInstance()
{
static BOOL bInit = FALSE;
if (bInit == FALSE)
{
bInit = TRUE;
m_pInstance = new MyClass();
}
中要加入线程控制代码,保证互斥。
具体实在进入if前,加入mutex控制。
否则同时进入if后,就会出现2个对象
不符合singleton的原则。
15 0 2007-10-26 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论