定义
:单例模式
(SingletonPattern)
,保证一个类仅有一个实例,并提供一个访问它的全局访问点。
类型:创建型模式 类图: 概述: 在很多比较大型的程序中,全局变量经常被用到。如果不用全局变量,那么在使用到的模块中,都需要用参数将全局变量传入,这是非常麻烦的。虽然要减少使用全局变量,但是如果需要,还是要用。单例模式就是对传统的全局的一种改进。单例可以做到延时实例化,即在需要的时候才进行实例化。针对一些大型的类,延时实例化是有好处的。 需要注意的是,在C#,Java中,有饿汉单例模式(即在声明变量的时候就初始化)和懒汉模式(在需要使用的时候再初始化)。而在GoF的书中,只讲到了懒汉模式,这是因为C++的静态变量在初始化时具有不确定性。同一个类中的静态变量初始化与其声明顺序一致,但是不同类中的静态变量初始化顺序却是不确定的。 另外在多线程中,需要注意访问的临界区,需要加Lock用以控制。 代码:添加了一个静态对象用来处理内存垃圾回收。
// C++
class
CSingleton
{
// 私有构造函数,不被允许直接构造对象
private
:
CSingleton
(
)
{
}
public
:
static
CSingleton
*
GetInstance
(
)
{
if
(
NULL
==
m_pSingleton
)
m_pSingleton
=
new
CSingleton
(
)
;
return
m_pSingleton
;
}
void
SetIdx
(
int
_nIdx
)
{
m_nIdx
=
_nIdx
;
}
int
GetIdx
(
)
{
return
m_nIdx
;
}
private
:
int
m_nIdx
;
static
CSingleton
*
m_pSingleton
;
public
:
class
CRecycle
{
public
:
~
CRecycle
(
)
{
if
(
NULL
!=
CSingleton
::
m_pSingleton
)
{
deleteCSingleton
::
m_pSingleton
;
}
}
}
;
static
CRecycle
m_recycle
;
}
;
// 静态成员变量的初始化
CSingleton
*
CSingleton
::
m_pSingleton
=
NULL
;
CSingleton
::
CRecycleCSingleton
::
m_recycle
;
int
_tmain
(
int
argc
,
_TCHAR
*
argv
[
])
{
CSingleton
::
GetInstance
(
)
->
SetIdx
(
1
)
;
return0
;
}
优缺点:
参考资料:
|
转载于:https://www.cnblogs.com/feihe0755/p/3510425.html