Files
envi-code/SourceCode/Code2026/tg_shs/inc/geo/TSafeResource.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

61 lines
1.6 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TSafeResource.h
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
// = Description: 类的声明 资源类共享支持
// 提供共享资源在浅拷贝时的引用自动计数和安全释放功能。
// 对于一个不支持深拷贝的资源类,通过(多重)继承此类,可以使其安全地被自由浅拷贝。
// 使用:子资源类的析构函数只能含一个Detach()调用,原析构函数变为重载的Release();
// 注意:通过任何一个资源对象的拷贝对资源进行管理,将影响所有其它拷贝。
// 子类可通过增加权限管理来保证对资源的安全管理。
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#ifndef _TSAFERESOURCE_H_
#define _TSAFERESOURCE_H_
class GEOAPI TSafeResource
{
public:
TSafeResource();
TSafeResource(TSafeResource& source);
virtual ~TSafeResource();
void Detach();
//子类将进行具体资源的分配。
void Attach(TSafeResource& source);
//获取资源
TSafeResource& operator = (TSafeResource& source);
public:
//引用计数,当引用计数为0时,资源可以释放。
int *pReferCount;
protected:
//获取具体资源
virtual void Apply(TSafeResource& source);
//释放资源
virtual void Release();
void IncreaseRef();
void DecreaseRef();
bool CanRelease();
bool IsLastRefer();
bool IsAttached();
};
#endif