62 lines
1.6 KiB
C++
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
|