[c++]关于内存。

  1. 对一个指针new了以后,如果有可能作为右值,一定要初始化。
// 对于二维数组的分配内存。
    for (int i = 0; i < height; i++) {
        param[i] = new int[width];
        for (int j = 0; j < width; j++)
            param[i][j] = otherMat.param[i][j];
    }
// 释放内存。
for (int i = 0; i < height; i++) {
        delete [] param[i];
    }
    delete [] param;
}

3 复制构造原则上可以用赋值操作符代替,但需要注意的是,赋值操作符要先清空左值,但复制构造函数不用。所以要在赋值操作符里先提供一个判断,右值是否为NULL。
4. 如果需要对一个对象指针的数组动态分配内存,并且有remove的操作,要把被remove的对象delete掉,然后依次把后面的指针赋给前面。此时会发现最后一个指针的指向仍然和前一个相同,但不影响,因为他和前面的指针的指向是相同的,只要前面的被delete,后面的就不再存在。(注意:绝对不能重复delete!)
5 目前最常出现memory leak 和memory error。前者是因为有内存没有被释放,后者是因为有未被初始化的值作为右值。把握住这个关键点,问题就好办了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值