美文网首页
包装数组

包装数组

作者: ww4u | 来源:发表于2018-05-31 12:40 被阅读0次
    • 第三方的库中有大量的内存开辟,结构不甚明晰,充斥着数组索引的形式
    • 为了监测其是否有内存异常,定义了一个模板类
    • 模板类记录空间长度和空间地址
    • 重载[],在进行索引访问时检查内存
    • 不再需要显式的分配和释放
    • 分配
    //  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];
        }
    };
    

    相关文章

      网友评论

          本文标题:包装数组

          本文链接:https://www.haomeiwen.com/subject/iqrqsftx.html