Files
envi-code/SourceCode/Code2026/inc/AdsXRx/SafeHeapMem.h
T
2026-09-28 15:28:50 +08:00

120 lines
1.8 KiB
C++

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