Files
envi-code/SourceCode/Code2026/tg_shs/inc/geo/TSafeHeapMem.h
T

119 lines
2.0 KiB
C++
Raw Normal View History

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