C++复制构造函数

什么是复制构造函数?

复制构造函数形如:

假设类为StringBad,其相应的构造函数为

StringBad(const StringBad &);

当使用一个对象初始化另一个对象的时候,编译器将自动生成上述函数

每当程序生成对象副本时,编译器都将使用复制构造函数

如一个函数为call(StringBad sb)sb为其副本,创建sb时就调用了该函数,这也就会造成如果某个类型中有

字符串时候,其副本因为浅拷贝的问题会指向与原类相同的地址,造成析构时,重复释放该地址内存。

 

假设motto是一个StringBad对象,则以下4种声明都将调用复制构造函数:

StringBad ditto(motto)

StringBad metoo=motto;

StringBad also=StringBad(motto);

String *pStringBad=new StringBad(motto);

最后一种是声明使用motto初始化一个匿名对象,并将新对象的地址赋给pstring指针

如何解决浅拷贝的问题呢?

自己定义复制构造函数,使其成为深拷贝,拿StringBad举例

假设StringBad{

              char *str;

              int    len;

}

自定义: StringBad(const StringBad &st){

                    len=st.len;

                    str=new char[len+1];

                    std::strcpy(str,st.str);

}

这样就解决了该问题

 

转换函数:

用于实现从类类型到某种类型的转换,而某种类型到类类型的转换用构造函数就可以

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值