基于私有化构造器与析构器的单件模式(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获得的是同一个实例 


你可能感兴趣的:(基于私有化构造器与析构器的单件模式(singleton) 实现及注释)