c++设计模式--单例模式

来源:互联网 发布:mac 获取当前用户名 编辑:程序博客网 时间:2024/06/05 13:40
// SingletonPattern.cpp : 定义控制台应用程序的入口点。
//通过此例程了解设计模式里的“单例模式”


#include "stdafx.h"#include <stdlib.h>#include <iostream>using namespace std;class CSingleton{public:static CSingleton* GetInstance(){return m_pInst;}void Set(int val){this->m_val=val;}int Get() const{return m_val;}void DeleteInstance()//让用户显示去调用此函数删除内存对象{if (m_pInst!=NULL){delete m_pInst;m_pInst=NULL;}cout<<"对象已经删除"<<endl;}private:CSingleton()//将构造函数定义为私有,这样用户在外部无法通过构造函数产生对象,//而只会通过单例函数生成一个单例,同时也保留了构造器的功能能够正常实现和调用这是保证单例模式的特性--》在全局范围内只生成一个对象{this->m_val=0;cout<<"构造函数"<<endl;} CSingleton(const CSingleton &);//显示声明拷贝构造函数,但是不去实现,表示禁用CSingleton& operator =(const CSingleton &);//同上//注意:因为在一个类内部,系统会自动生成默认的四个成员函数,分别是:构造函数,析构函数,拷贝构造函数,赋值运算符//只有当用户显示定义自己的这四个函数时,系统才会取消这个默认机制,因为单例模式的特性是只在全局范围内仅存一个实例,用户无法//再去生成额外的实例,但是默认的拷贝构造函数和赋值函数会让用户自由选择何时去让一个已有的对象通过赋值的方式产生另外一个对象,这就与单例模式//产生矛盾,所以用户必须让编译器自己知道“你们放心好了,我不会干扰你们单例模式的机制”,那就是禁用这些函数int m_val;static CSingleton *m_pInst;};CSingleton* CSingleton::m_pInst=new CSingleton(); //通过测试结果,我们可以发现在进入main函数之前,c++编译器还有做的事就是初始化堆上的对象//例如:CSingleton* CSingleton::m_pInst=new CSingleton(); 是全局对象,它利用new操作符创建了对象,进入单例类的构造器//当然这个对象是静态的,只会属于类本身,而不属于哪个特定对象(这正是单例模式的特性)int _tmain(int argc, _TCHAR* argv[]){cout<<"------------单例模式测试案例-----------------"<<endl<<endl;CSingleton *pSingleton=CSingleton::GetInstance();cout<<pSingleton->Get()<<endl;pSingleton->Set(10);cout<<endl;cout<<pSingleton->Get()<<endl;pSingleton->DeleteInstance();system("pause");return 0;}





原创粉丝点击