多次相当于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;
}