C++拷贝构造函数

拷贝构造函数使用场景

拷贝构造函数

  • 拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的第一个参数是本类型的一个引用变量

  • 拷贝控制与资源管理

    • 行为像值的类.(独立). 每个对象都拥有一份自己的拷贝.
    • 行为像指针的类.(共享). 引用计数!

注意: 若类中有指针变量,最好是要重写拷贝构造函数和重载赋值运算符

如何禁止自动生成拷贝构造函数?

  • 为了阻止生成拷贝构造函数和拷贝赋值函数.手动重写这个两个函数,将其设置为private.防止访问.
  • 但是类的成员函数和友元函数还是可以访问私有的拷贝构造函数.所以最好的方法是: 定义一个基类,在基类中将拷贝构造函数和拷贝赋值函数设置为private.那么派生类就不会自动生成这两个函数了.且base类中是私有的.派生类会阻止执行相关操作.

拷贝构造函数应用场景

第一个应用场景:
1.当用类的对象去初始化同类的另一个对象时。

Date d2(d1);
Date d2 = d1; //初始化语句,并非赋值语句。

第二个场景:
2.当函数的形参是类的对象,调用函数进行形参和实参结合时。

void Func(A a1) //形参是类Date的对象a1
{ }

int main( )
{
    A a
    Func(a2); //调用Func时,实参a2是类Date的对象,将调用拷贝构造函数,初始化形参a1.
    return 0;
}

第三个场景:
3.把对象作为返回值
当函数的返回值是对象,函数执行完成返回调用者时。

A Func1()
{
     A a1(4);
     return a1;   //函数的返回值是对象
}
int main( )
{
     A a2;
     a2 = Func1();   //函数执行完成,返回调用者时,调用拷贝构造函数
     return 0;
}

在函数Func1( )内,执行语句“return a1;”时,将会调用拷贝构造函数将a1的值复制到一个匿名对象中,
这个匿名对象是编译系统在主程序中临时创建的。函数执行结束时对象a1消失,但临时对象会存在于语句
“a2 = Func( )”中。执行完这个语句后,临时对象的使命也就完成了,该临时对象便自动消失了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值