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