6.2.2复制构造函数、浅复制深复制、析构函数

二、复制构造函数
复制构造函数的作用:

使用一个已经存在的对象初始化一个同类的新对象。

复制构造函数的特点:
  • 复制构造函数名与类名相同,并且也没有返回值类型。
  • 复制构造函数可写在类中,也可以写在类外。
  • 复制构造函数要求有一个类类型的引用参数。
  • 如果没有显式定义复制构造函数,系统自动生成一个默认形式的复制构造函数
复制构造函数的形参为本类的对象引用。

class 类名
{ public :
类名(形参);//构造函数
类名([const ]类名 &引用名);//复制构造函数

};
类名::类名([const] 类名 &引用名) //复制构造函数的实现
{ 函数体 }

例子

class Point
{
public:
Point(int xx=0,int yy=0){X=xx; Y=yy;} //构造函数
Point(Point& p); //复制构造函数
int GetX() {return X;}
int GetY() {return Y;}
private:
int X,Y;
};
Point::Point (Point& p) 
//复制构造函数的实现
{
X=p.X;
Y=p.Y;
cout<<"复制构造函数被调用"<<endl;
}
调用复制构造函数的情况
  • 当用类的一个对象去初始化该类的另一个对象时系统自动调用复制构造函数实现拷贝赋值
  • 函数的形参为类对象,调用函数时,实参传递给形参,系统自动调用复制构造函数,用实参对象去初始化形参对象。
  • 如果函数的返回值是类的对象,函数执行完返回调用者时,需要生成一个临时对象作为函数返回结果,
默认的复制构造函数
三、浅复制与深复制

对象生存期结束时,需要做清理工作,比如:释放成员(指针)所占有的存储空间。
就需要析构函数。

析构函数

 作用:用于完成对象被删除前的一些清理工作。
 在对象的生存期结束的时刻,即在删除一个对象前由系统自动调用,然后再释放此对象所属的空间。
 如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。

规定:
  • 是类的公有函数成员,名称由类名前加” ~”构成
  • 没有参数,没有返回值
  • 一个类中只能定义一个析构函数,不能重载
默认析构函数
  • 若没有显式定义析构函数,则系统自动生成一个默认形式的析构函数。
  • 系统自动生成的默认构造函数形式如下:
    类名::~类名(){}
  • 一般情况下,可以不定义析构函数
    但如果类的数据成员中包含指针变量是从堆上进行存储空间分配的话,需要在析构函数中进行存储空间的回收
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值