c++学习-知识点小结

1、

函数中按值传递类对象将调用复制构造函数。最好的办法是按引用传递。

 

如按值传递的函数:

 

void callme1 (StringBad  );//StringBad 是一个类,这里使用的是按值传递

 

应该改成:

 

void callme1 (StringBad &);// 这个是按引用传递的,不会调用复制构造函数

 

2、浅复制与深度复制

默认的复制构造函数逐个复制非静态成员(成员复制也称之为浅复制),浅复制在复制字符串时,容易出现问题。

比如在:

sailor.str = sport.str;    // sailor 和sport是两个类对象

这里复制的不是真正的字符串,而是一个指向字符串的指针。

 

两个指针指向同一个字符串时并没有问题,问题在于在调用析构函数,释放sailor.str时:

delete   [ ]  sailor.str; // delete 语句将释放字符串占用的内存。

 

然后,再次调用析构函数时,释放sports时,

 

delete [ ] sports.str;

 

由于sports.str 指向的内存已经被sailor的析构函数释放,这将导致不确定的、可能有害的后果。

 

解决办法:进行深度复制,也就是说复制构造函数应当复制字符串并将副本的地址赋给str成员,而不仅仅是复制字符串地址。

 

  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值