包装数组
2018-05-31 本文已影响0人
ww4u
- 第三方的库中有大量的内存开辟,结构不甚明晰,充斥着数组索引的形式
- 为了监测其是否有内存异常,定义了一个模板类
- 模板类记录空间长度和空间地址
- 重载[],在进行索引访问时检查内存
- 不再需要显式的分配和释放
- 分配
// int* ZCP = (int*)malloc((length - 1) * sizeof(int));
// memset(ZCP, 0, (length - 1) * sizeof(int));
// double* scaZCP = (double*)malloc(joinNum *(length - 1) * sizeof(double));
// memset(scaZCP, 0, joinNum * (length - 1) * sizeof(double));
smartBuffer<int> ZCP( (length - 1) );
smartBuffer<double> scaZCP( joinNum *(length - 1) );
- 使用和数组(指针)相同
template<typename T>
class smartBuffer{
public:
T *m_pBuffer;
int mSize;
public:
smartBuffer( int size )
{
m_pBuffer = NULL;
mSize = 0;
if ( size > 0 )
{
allocate( size );
}
}
~smartBuffer()
{
if ( mSize != 0 )
{
delete []m_pBuffer;
m_pBuffer = NULL;
mSize = 0;
}
}
void allocate( int n )
{
m_pBuffer = new T[ n ];
mSize = n;
Q_ASSERT( NULL != m_pBuffer );
memset( m_pBuffer, 0, sizeof(T)*mSize );
}
T& operator[]( int i )
{
Q_ASSERT( i >=0 && i < mSize );
return m_pBuffer[i];
}
};