标签:style blog io color os 使用 sp on div
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实用性:1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它。
2.当这个唯一的实例应该是通过子类可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
效果: 1.只有一个实例,可以严格的控制客户怎样以及何时访问。
2.缩小名空间,避免了唯一实例的全局变量污染名空间。
3.可以控制对象的实例个数。
代码示例:这里类是一个人Micla,世界上仅有一个Mical,只能产生一个实例。
#ifndef _SINGLETON_ #define _SINGLETON_ class Mical{ public: ~Mical(){} static Mical* GetMical() { if(NULL == _mpMical) { _mpMical = new Mical; static Delete Del; } return _mpMical; } private: static Mical* _mpMical; ////避免了不同情况实例化类对象 Mical(const Mical& another){} Mical& operator = (const Mical& another){} Mical(){} }; #endif
实现部分:
#include <iostream> #include "Singleton.h" using namespace std; Mical* Mical::_mpMical = NULL; int main() { Mical* pMical = Mical::GetMical(); delete Mical::GetMical(); return 0; }
用Mical* pMical = Mical::GetMical(); 实现了访问Micla 然后我们可以通过pMical访问Mical的各种属性(假设为:身高,性别等)
之后通过delete Mical::GetMical(); 删除对象。 但这样的删除容易被遗忘,因为new的过程是被封装起来的。
于是通过内嵌类实现自动delete:
#ifndef _SINGLETON_ #define _SINGLETON_ class Mical{ public: ~Mical(){} static Mical* GetMical() { if(NULL == _mpMical) { _mpMical = new Mical; static Delete Del; } return _mpMical; } private: static Mical* _mpMical; ////避免了不同情况实例化类对象 Mical(const Mical& another){} Mical& operator = (const Mical& another){} Mical(){} class Delete{ public: Delete(){} ~Delete(){delete _mpMical;} }; }; #endif
这就实现了Singleton;
要注意的是 1.封死其他的实例化接口 2.对象删除问题处理
-----新手初学,望大神指点-----
标签:style blog io color os 使用 sp on div
原文地址:http://www.cnblogs.com/wrbxdj/p/4172929.html