C++单例类的实现方法

这是一个C++单例类的实现方法。





#include "stdafx.h"
#include <iostream>    
using namespace std;    
//单例类的C++实现    
class Singleton    
{    
private:    
	Singleton();//注意:构造方法私有       
	static Singleton* instance;//惟一实例    
	int var;//成员变量(用于测试)    
public:    
	static Singleton* GetInstance();//工厂方法(用来获得实例)    
	int getVar();//获得var的值      
};   
//构造方法实现    
Singleton::Singleton()    
{    
	this->var = 20;    
	cout<<"Singleton Constructor"<<endl;    
}    
//初始化静态成员    
Singleton* Singleton::instance=new Singleton();    //这条等于这个new Singleton(),
//是因为有这个this->var,this是本类的对象
Singleton* Singleton::GetInstance()    			  
{    
	return instance;    
}       
int Singleton::getVar()    
{    
	return this->var;    
}    
//main    
int main(int argc, char* argv[])    
{    
	Singleton *ton1 = Singleton::GetInstance();       
	cout<<"ton1 var = "<<ton1->getVar()<<endl;    

	system("pause");
	return 0;    
}







与上面的程序相比,下面的程序增加了保护性。

/*C++单例模式的实现*/  
#include "stdafx.h"
#include <iostream>  
using namespace std;  

class Singleton  
{  
public:  
	static Singleton* getInstance();//一个类方法,返回Single类型指针  
	void setValue(int);  
	int getValue();  
	~Singleton();  
private:  
	Singleton();//构造函数私有  
	static Singleton* instance;//唯一一个实例  
	int value;  
};  
Singleton* Singleton::instance=NULL;//必须类外定义初值NULL  
Singleton* Singleton::getInstance()  
{  
	if (NULL==instance)  
	{  
		instance=new Singleton();  
	}  
	return instance;  
}  

Singleton::Singleton()  
{  
	this->value=100;  
	cout<<"Singleton Constructor!!!"<<endl;  
}  

Singleton::~Singleton()  
{  
	cout<<"Singleton Destructor!!!"<<endl;  
}  

int Singleton::getValue()  
{   
	return this->value;  
}  

void Singleton::setValue(int v)  
{  
	value=v;  
}  
//测试程序  
int main()  
{  
	Singleton* s1=Singleton::getInstance();  
	Singleton* s2=Singleton::getInstance();  

	if(s1==s2)  
		cout<<"s1,s2相等,并指向唯一一个单例实例"<<endl;  
	cout<<"s1指向的实例的value等于"<<s1->getValue()<<endl;    
	cout<<"s2指向的实例的value等于"<<s2->getValue()<<endl;  
	s1->setValue(200);  
	cout<<"s1指向的实例的value等于"<<s1->getValue()<<endl;   
	cout<<"s2指向的实例的value等于"<<s2->getValue()<<endl;  

	delete Singleton::getInstance();  

	system("pause");
	return 0;  
}  



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值