- 对一个指针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。前者是因为有内存没有被释放,后者是因为有未被初始化的值作为右值。把握住这个关键点,问题就好办了。