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

62 lines
1.6 KiB
C++

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