Files
envi-code/SourceCode/Code2026/inc/AdsXRx/SafeHeapMem.h
T

119 lines
1.9 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, SH Software Co. Ltd.
// = FileName : SafeHeapMem.h
// = Version : ver2.0
// = Author : zjq
// = CreateDate : 2002-09-09
2026-10-04 00:04:20 +08:00
// = Description: 类的声明 可以自由浅拷贝的堆内存资源
2026-09-28 15:28:50 +08:00
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#ifndef _SAFEHEAPMEM_H_
#define _SAFEHEAPMEM_H_
#ifndef _SAFERESOURCE_H_
#include "SafeResource.h"
#endif
template<class T> class SafeHeapMem : public SafeResource
{
public:
2026-10-04 00:04:20 +08:00
//初次分配堆内存
2026-09-28 15:28:50 +08:00
SafeHeapMem(long size = 0);
2026-10-04 00:04:20 +08:00
//放弃堆空间
2026-09-28 15:28:50 +08:00
virtual ~SafeHeapMem();
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(SafeResource& source);
protected:
T* p;
};
template<class T>
SafeHeapMem<T>::SafeHeapMem(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 SafeHeapMem<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>
SafeHeapMem<T>::~SafeHeapMem()
{
2026-10-04 00:04:20 +08:00
//放弃堆空间
2026-09-28 15:28:50 +08:00
Detach();
}
template<class T>
T& SafeHeapMem<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& SafeHeapMem<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 SafeHeapMem<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 SafeHeapMem<T>::Apply(SafeResource&source)
{
2026-10-04 00:04:20 +08:00
//获取堆内存
//得到它的地址,
2026-09-28 15:28:50 +08:00
p = ((SafeHeapMem<T>&)source).p;
}
#endif