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

119 lines
2.0 KiB
C++

//-----------------------------------------------------------------------------+
// 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 T> 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<class T>
TSafeHeapMem<T>::TSafeHeapMem(long size)
{
//初次分配堆内存
//如果要求的长度<=0,则分配一个空内存,
if(size <= 0)
{
p = NULL;
}
else
{
p = new T[size];
}
}
template<class T>
void TSafeHeapMem<T>::Realloc(long size)
{
//分配一个新资源并放弃原资源
Detach();
if(size <= 0)
{
p = NULL;
}
else
{
p = new T[size];
}
}
template<class T>
TSafeHeapMem<T>::~TSafeHeapMem()
{
//放弃堆空间
Detach();
}
template<class T>
T& TSafeHeapMem<T>::operator*()
{
//p 不能为null
return *p;
}
template<class T>
T& TSafeHeapMem<T>::operator[](long index)
{
//index必须是有效的
return p[index];
}
template<class T>
void TSafeHeapMem<T>::Release()
{
//释放堆内存
//如果内存为不存在,则不进行任何操作。
if(p != NULL)
{
delete[] p;
p = NULL;
}
}
template<class T>
void TSafeHeapMem<T>::Apply(TSafeResource&source)
{
//获取堆内存
//得到它的地址,
p = ((TSafeHeapMem<T>&)source).p;
}
#endif