您的位置:首页 > 其它

基于私有化构造器与析构器的单件模式(singleton) 实现及注释

2013-10-01 00:06 489 查看
如有不明白注释可以参看 上篇中关于构造器与析构器的私有化。

#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获得的是同一个实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: