C++的单例模式
来源:互联网 发布:ubuntu vim不保存退出 编辑:程序博客网 时间:2024/05/26 12:02
C++的单例模式
一、要点:
二、实现:
//way(1)
class singleton
{
public:
static bool flag;
static singleton*great()
{
if (flag== 1)
{
flag =0; //创建一个对象后,把记录对象个数的flag清零,下次再就不能再继续创建对象了。
return(newsingleton);
}
else
{
return NULL;
}
}
~singleton()
{
flag = 1;
}
private:
singleton(){}/*实例化一个对象时,实质是在类外调用构造函数来构建对象,只能通过this->指针或者“对象+点”的方式调用
而私有的构造函数活动范围只是在类内的,我们无法在类外直接用它创建对象,这时,可以在类内
定义一个函数great()(主意,这个函数必须是不属于类的,否则我们在类外同样无法调用它来构建对象)
来调用构造函数,不属于类的函数有static和protectd,所以我们定义这个函数为static的,这样我们在类外就可以
调用great()函数(它间接调用私有的构造函数)来创建一个对象了*/
};
bool singleton::flag=1;
int main()
{
//只能创建一个对象
singleton *s1 = singleton::great();
cout <<s1 << endl;//0073A070 //第一次创建s1时合法
singleton *s2 = singleton::great();
cout <<s2 << endl;//00000000 //第二次创建s2时合法,s2的值为NULL,则对象s2是无效,不能使用s2
singleton *s3 = singleton::great();
delete s3;
singleton *s4 = singleton::great();
cout <<s4 << endl;//005BA570 //创建S3,然后在销毁S3(回到原始状态,相当于做无用功),而这时S4则是合法有效的,可以使用它
system("pause");
return 0;
}
//way(2)
classCSingleton
{
private:
CSingleton()
{
}
static CSingleton *m_pInstance;
class CGarbo
{
public:
~CGarbo()
{
if(CSingleton::m_pInstance)
deleteCSingleton::m_pInstance;
}
};
static CGarbo Garbo;
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL)
m_pInstance = newCSingleton();
return m_pInstance;
}
};
在程序运行结束时,系统会调用CSingleton的静态成员Garbo的析构函数,该析构函数会删除单例的唯一实例。使用这种方法释放单例对象有以下特征:
1.在单例类内部定义专有的嵌套类。
2.在单例类内定义私有的专门用于释放的静态成员。
3.利用程序在结束时析构全局变量的特性,选择最终的释放时机
- C ++的单例模式
- C#单例模式
- C#-单例模式
- 单例模式(C++)
- 【C++】单例模式
- [C++]单例模式
- 单例模式(C++)
- 单例模式的设计(C++)
- 【Objective-C】单例模式的实现
- Ojective-c 单例模式的另一种
- C#:Form窗体的单例模式
- Objective-C 单例模式的实现
- objective-c的单例模式测试
- c++--Singleton单例模式的实现
- 设计模式 - 线程安全的单例模式(C#)
- 线程相关的单例模式(C\C++)
- 【C++】Chapter17:单例模式
- Object-c单例模式
- Redis 存储字符串和对象
- Maven 开发环境搭建
- 智能指针剖析
- python 按对象传值
- err:ubuntu14.04 Samba服务无法访问 可能没有权限 指定的网络名不再可用的问题
- C++的单例模式
- C#中使用正则表达式验证电话号码、手机号、身份证号(转)
- 一个shell脚本,实现利用OpenSSL生成X509证书
- 第七周的思考
- Android测试--总览
- 浅谈hibernate的sessionFactory和session
- PL/SQL程序语言的学习---PL/SQL块
- 溢出避免:求平均数
- hdu 2669 romantic