单例模式的特点:
一个类只有一个实例;
提供一个全局访问点;
禁止拷贝;
那代码中都需要做什么事情,才能够实现这些特点呢?
(1)一个实例。也即是每次获取该类的实例的时候,都必须返回已经存在的同一个实例。这样的话,就不能允许调用者使用new操作符来任意创建实例(一旦使用new,就会重新分配内存,就不能保证一个实例了)。
那就需要将类的构造函数声明为private。
(2)全局访问点。因为构造函数私有化了,而该类的成员变量和成员函数只能用过类实例来访问,所以外界就需要一个能够访问该类的方式,也就是全局访问点。
类中创建一个静态成员函数。
(3)禁止拷贝
因为只有一个实例,所以不允许出现拷贝。可以通过如下方式禁止类实例的拷贝:
拷贝构造函数声明为私有,并且不提供实现;
复制运算符(operator = )声明为私有,并且不提供实现。
(4)解决单实例类的析构问题
使用局部静态变量,来解决析构问题,并且又不影响单实例的唯一性。
下面是用C++写的单例类实现:
<pre name="code" class="cpp">#pragma once
class SingleInstClass
{
public:
static SingleInstClass &GetSingleInst()
{
static SingleInstClass m_inst;
return m_inst;
}
void printlog()
{
printf("call printlog()\n");
}
private:
SingleInstClass(void)
{
printf("call SingleInstClass()\n");
}
~SingleInstClass(void)
{
printf("call ~SingleInstClass()\n");
}
SingleInstClass(const SingleInstClass&);
SingleInstClass & operator = (const SingleInstClass&);
};
int _tmain(int argc, _TCHAR* argv[])
{
SingleInstClass &inst = SingleInstClass::GetSingleInst();
inst.printlog();
return 0;
}
2624

被折叠的 条评论
为什么被折叠?



