//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd. // = FileName : TSafeHeapMem.h // = Version : ver2.0 // = Author : xlc // = CreateDate : 2002-09-09 // = Description: 类的声明 可以自由浅拷贝的堆内存资源 // = Maintainers: // //-----------------------------------------------------------------------------+ #ifndef _TSAFEHEAPMEM_H_ #define _TSAFEHEAPMEM_H_ #ifndef _TSAFERESOURCE_H_ #include "TSafeResource.h" #endif template class TSafeHeapMem : public TSafeResource { public: //初次分配堆内存 TSafeHeapMem(long size = 0); //放弃堆空间 virtual ~TSafeHeapMem(); //分配一个新资源并放弃原资源 void Realloc(long size); T& operator*(); T& operator[](long index); protected: //释放堆内存 virtual void Release(); //获取堆内存 virtual void Apply(TSafeResource& source); protected: T* p; }; template TSafeHeapMem::TSafeHeapMem(long size) { //初次分配堆内存 //如果要求的长度<=0,则分配一个空内存, if(size <= 0) { p = NULL; } else { p = new T[size]; } } template void TSafeHeapMem::Realloc(long size) { //分配一个新资源并放弃原资源 Detach(); if(size <= 0) { p = NULL; } else { p = new T[size]; } } template TSafeHeapMem::~TSafeHeapMem() { //放弃堆空间 Detach(); } template T& TSafeHeapMem::operator*() { //p 不能为null return *p; } template T& TSafeHeapMem::operator[](long index) { //index必须是有效的 return p[index]; } template void TSafeHeapMem::Release() { //释放堆内存 //如果内存为不存在,则不进行任何操作。 if(p != NULL) { delete[] p; p = NULL; } } template void TSafeHeapMem::Apply(TSafeResource&source) { //获取堆内存 //得到它的地址, p = ((TSafeHeapMem&)source).p; } #endif