包装数组

  • 第三方的库中有大量的内存开辟,结构不甚明晰,充斥着数组索引的形式
  • 为了监测其是否有内存异常,定义了一个模板类
  • 模板类记录空间长度和空间地址
  • 重载[],在进行索引访问时检查内存
  • 不再需要显式的分配和释放
  • 分配
//  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];
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,347评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,782评论 1 32
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,072评论 18 399
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,602评论 1 14
  • 十拿九稳 分毫不差 年老体衰 容光焕发 若有所思 一五一十 千载难逢 我这辈子见过的酒鬼不算少了,可从来没见过像...
    紫曦陌离阅读 402评论 0 0

友情链接更多精彩内容