唯一实例。

来源:互联网 发布:淘宝卖美女图片违规 编辑:程序博客网 时间:2024/05/18 22:54

多次相当于New对象、结果只返回相同一段空间位置。并且内部提供计数、以便于最后一次判断释放。


感悟就是,编程。要清楚自己写的是什么,包括内部实现过程机制原理。




OnlyObject.h
//
//////////////////////////////////////////////////////////////////////


#if !defined(AFX_ONLYOBJECT_H__ED2AA7E1_7F55_41F2_8DEC_FF33EABDD3C5__INCLUDED_)
#define AFX_ONLYOBJECT_H__ED2AA7E1_7F55_41F2_8DEC_FF33EABDD3C5__INCLUDED_


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


class COnlyObject  
{
//接口函数
public:
virtual ~COnlyObject();
static COnlyObject* InitObject();// 私有化构造函数,类像外部提供静态接口,不需要成员调用(static)。| 应该返回指针类型而不是变量。
//接口变量




protected:
//保护函数
COnlyObject();


//保护变量


static COnlyObject* spOnlyObject;
static int snCount;
};


#endif // !defined(AFX_ONLYOBJECT_H__ED2AA7E1_7F55_41F2_8DEC_FF33EABDD3C5__INCLUDED_)


OnlyObject.cpp: implementation of the COnlyObject class.
//
//////////////////////////////////////////////////////////////////////


#include "stdafx.h"
#include "OnlyObject.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


int COnlyObject::snCount = 0;
COnlyObject *COnlyObject::spOnlyObject = NULL;


COnlyObject::COnlyObject()
{
}


COnlyObject::~COnlyObject()
{
if (NULL != spOnlyObject)
{
snCount--;
if (0 == snCount)
{
delete spOnlyObject;
spOnlyObject = NULL;
}
}
}


COnlyObject* COnlyObject::InitObject()
{
if (NULL == spOnlyObject)
{
spOnlyObject = new COnlyObject;
}
snCount++;


return spOnlyObject;
}

0 0