//-----------------------------------------------------------------------------+ // 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