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

如有不明白注释可以参看 上篇中关于构造器与析构器的私有化。

#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获得的是同一个实例 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

developer_wgl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值