基于私有化构造器与析构器的单件模式(singleton) 实现及注释
2013-10-01 00:06
489 查看
如有不明白注释可以参看 上篇中关于构造器与析构器的私有化。
--------------------打印输出------------------------
p和p1获得的是同一个实例
#include <iostream> using namespace std; class OnlyHeapClass { public: /*构造器被私有化以后,只能过接口调用构造器,但是调用接口的前提是有对象,故只能声明为 static*/ static OnlyHeapClass* GetInstance(); /*为了实现共享,不能在栈上实例化而在堆上实话化,故将析构器私有化。不能通过 delete来 销毁对象,故要通过我接口来调用析构器。 */ void Destroy(); private: OnlyHeapClass() {} //保证对象只能通过对接口实例化。还可阻止派生 ~OnlyHeapClass(){} //保证对象只能在堆上实例化,并且只能通过接口销毁。 //对象实例化以前,static函数可用的变量也为static static OnlyHeapClass * instance; }; OnlyHeapClass * OnlyHeapClass::instance = NULL; OnlyHeapClass* OnlyHeapClass::GetInstance() { if(NULL == instance) { instance = new OnlyHeapClass; } return instance; } void OnlyHeapClass::Destroy() //只有一次实例化,故只有一次销毁, 防止多次销毁 {//也可以实现为静态函数 if(instance != NULL) { delete instance; instance = NULL; } } int main() { OnlyHeapClass *p = OnlyHeapClass::GetInstance(); OnlyHeapClass *p1 = OnlyHeapClass::GetInstance(); if(p == p1) { cout<<"p和p1获得的是同一个实例 "<<endl; } p->Destroy(); p->Destroy();//多次销毁,亦不会出现,多次释放的bug return 0; }
--------------------打印输出------------------------
p和p1获得的是同一个实例
相关文章推荐
- Singleton(单件)模式的两种实现方法
- 单实例模式的实现(singleton)----单件
- JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
- ISingletonDisplayer 单件模式显示器C#实现
- 四种方法实现单件(Singleton)模式
- 多线程安全的Singleton单件模式在C++,java与C#下的实现
- 带注册功能的单件(Singleton)模式的C++实现
- 单件模式在C#中的实现--Implementing the Singleton Pattern in C#
- 【剑指offer】题2:实现单件(singleton)模式
- 【读书笔记】HeadFirst设计模式——单件不简单:详述实现Singleton模式需要考虑的方方面面
- PHP 实现单件(singleton)模式
- C#实现的基于单件模式的ADO.NET数据库
- 五种单件模式之Singleton的实现方法详解
- Head First设计模式 C++实现-Singleton(单件模式)
- Head First设计模式C++实现--第五章:单件(Singleton)模式
- singleton 单件模式的实现
- 设计模式之(Singleton)模式的几种实现
- BlogEngine.Net架构与源代码分析系列part3:数据存储——基于Provider模式的实现
- 单件模式[Singleton]
- singleton 单件模式