2020年4月15日整理
对象的动态创建和释放
定义:Box *p=new Box(1,2,3);
用delete释放空间时会自动调用析构函数
对象的赋值和复制
赋值:对象1=对象2;
复制:Box box1(box2);
或Box box2=box1,box2=ox3;
1.赋值时对象已建立好,而复制是创建了一个对象
2.类的数据成员中包括动态分配的数据时,不能进行赋值操作
3.注意Box b2=b1;是复制而非赋值。
关于复制:
当进行对象的复制时,系统会调用复制构造函数,也叫拷贝构造函数。该函数的原型:
Box::Box(const box &b1)//注意有const,防止在此过程中改变对象的值。且其声明中有&,普通构造函数没有。必须是引用!否则报错
{
this->heigh=b1.heigh;
this->width=b1.width;
}
以上成为浅拷贝,多数情况不需要用户自行定义拷贝构造函数。但当数据成员中有指针时,此时需要在构造函数中new一个空间穿其地址该指针,当此时不自行定义拷贝构造函数,则拷贝得来的对象和原对象中的指针数据成员将指向同一个空间,此时动用析构函数来释放空间时就会出错。故需要自行定义一个拷贝构造函数,在构造函数中new一个空间后,将原对象中指针的值赋给它。