首页 > 代码库 > 单例模式
单例模式
一、简介
1、单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2、C++设计一个单例模式的方法如下:
(1)构造函数声明为私有; 这样就保证了不能随意构造一个对象。
(2) 将拷贝构造函数与等号运算符声明为私有,并不提供他们的实现; 即禁止对象被拷贝。
(3) 在类中声明一个静态的全局访问接口;用来创建对象的接口函数。
(4) 声明一个静态的私有实例化指针;将创建的对象保存在此,若已经创建则直接调用,否则创建新的。
二、C++程序
1 // 单例模式.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include<iostream> 6 using namespace std; 7 class Singleton 8 { 9 private:10 Singleton()//构造函数一定要声明为私有的11 {12 cout<<"构造了一个singleton对象"<<endl;13 }14 static Singleton *instance;//静态的,为所有对象所共有15 public:16 static Singleton * getinstance()17 {18 if(NULL==instance)19 {20 instance =new Singleton();21 }22 return instance;23 }24 Singleton(const Singleton& ){}25 Singleton & operator=(const Singleton & ){}26 27 ~Singleton() 28 { 29 } 30 };31 32 Singleton * Singleton::instance; //静态变量的定义性声明33 34 int _tmain(int argc, _TCHAR* argv[])35 {36 Singleton *s1=Singleton::getinstance();37 Singleton *s2=Singleton::getinstance();38 Singleton *s3=Singleton::getinstance();39 return 0;40 }
上述程序中s1、s2、s3用了三次对象,但是其实只调用了一次构造函数,也可以通过地址看出。
当然这样写有一个缺点是instance中申请的内存空间始终不会被释放的,解决办法可以看这个老兄的博客http://blog.csdn.net/ab198604/article/details/19196315
另外注意:类声明中只描述如何分配内存,但是并不真正分配内存。所以静态变量要类之外定义(定义是分配内存的)后才能够使用,所以要在程序的第32写
Singleton * Singleton::instance; 否则的话,instance都没有内存当然是没有办法存储new Singleton();了
单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。