练习13.6:
拷贝赋值运算符本身是一个重载的赋值运算符,定义为类的成员函数,左侧运算对象绑定到隐含的this参数,而右侧运算对象是所属类类型的,作为函数的参数,函数返回指向其左侧运算对象的引用。
当对类对象进行赋值时,会使用拷贝赋值运算符。
通常情况下,合成的拷贝赋值运算符会将右侧对象的非static成员逐个赋予左侧对象的对应成员,这些赋值操作是由成员类型的拷贝赋值运算符来完成的。
若一个类未定义自己的拷贝赋值运算符,编译器就会为其合成拷贝赋值运算符,完成赋值操作,但对于某些类,还会起到禁止该类型对象赋值的效果。

练习13.7:

由于两个类都未定义拷贝赋值运算符,因此编译器为它们定义了合成的拷贝赋值运算符。
与拷贝构造函数的行为类似,赋值一个StrBlob时,赋值其唯一的成员data,使用shared_ptr的拷贝赋值运算符来完成,因此其引用计数增加1。
赋值一个StrBlobPtr时,赋值成员wptr,用weak_ptr的拷贝赋值运算符进行赋值,引用计数不变,然后赋值curr,直接进行内存复制。

练习13.8:

HasPtr&HasPtr::operator=(const HasPtr &rhs)
{auto newps = new string(*rhs.ps);//拷贝指针指向的对象delete ps;//销毁原stringps = newps;//指向新stringi = rhs.i;//使用内置的int赋值return *this;//返回一个此对象的引用
}

《C++ Primer》13.1.2节练习相关推荐

  1. C++primer 13.1.6节练习

    练习13.18 1 #include <iostream> 2 #include <string> 3 #include <memory> 4 5 using na ...

  2. C++primer 13.6.2节练习

    练习13.49 13.50 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #in ...

  3. 《C++ Primer》13.1.3节练习

    练习13.9: 析构函数完成与构造函数相反的工作:释放对象使用的资源,销毁非静态数据成员.从语法上看,它是类的一个成员函数,名字是波浪号接类名,没有返回值,也不接受参数. 当一个类没有定义析构函数时, ...

  4. 《C++ Primer》13.1.1节练习

    练习13.1: 如果构造函数的第一个参数是自身类类型的引用,且所有其他参数(如果有的话)都有默认值,则此构造函数是拷贝构造函数.拷贝构造函数在以下几种情况下会被使用: ●拷贝初始化(用=定义变量). ...

  5. 《C++ Primer》13.1.6节练习(部分)

    练习13.18: #include <iostream> #include <string> using namespace std;class Employee {priva ...

  6. 《C++ Primer》13.1.4节练习

    练习13.14: 这是一个典型的应该定义拷贝控制成员的场合.如果不定义拷贝构造函数和拷贝赋值运算符,依赖合成的版本,则在拷贝构造和赋值时,会简单复制数据成员.对本问题来说,就是将序号简单复制给新对象. ...

  7. 【C++ Primer | 13】课后习题答案

    文章目录 13.1.4节目练习 13.2节练习 13.2.2练习 13.1.4节目练习 练习13.14 #include <iostream> using namespace std;cl ...

  8. C++primer 9.2.1节练习

    练习9.3 迭代器begin和end必须指向相同的容器,end可以与begin指向相同的位置,但不能指向begin之前的位置: 练习9.4 1 #include <iostream> 2 ...

  9. C++primer 10.2.1节练习

    练习10.3 1 #include<iostream> 2 #include<string> 3 #include<vector> 4 #include <s ...

最新文章

  1. 【Kaggle Learn】Python 5-8
  2. 学术青年如何克服拖延症——5条技巧助你前进
  3. jQuery的attr方法处理checkbox的问题
  4. 计算机网络专业教学模式,计算机网络技术专业教学模式改革探索
  5. 视觉SLAM笔记(5) 编程基础
  6. GIve Me A Welcome Hug!
  7. 活跃在企业信息化特别是制造业PLM领域的国外咨询公司
  8. [转]没有找到 MFC42D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。解决方法!...
  9. dbvisualizer报错No JVM
  10. bin文件如何编辑_每日学习:Linux文件与目录管理常用命令解析
  11. php mysql 用户修改_PHP+MYSQL实现用户的增删改查,mysql增删_PHP教程
  12. OEM信息自定义工具v2.0
  13. python创意网络爬虫_基于Python专用型网络爬虫的设计及实现
  14. 【数据可视化】数据可视化分类
  15. MySQL —— 14、触发器
  16. matlab exm,exm 《Experiments with MATLAB》这本书的程序源码,附中文注释,简单易懂,是学习 238万源代码下载- www.pudn.com...
  17. 闭关修炼(六)各种锁
  18. 不花钱,自己查论文抄袭程度
  19. 蔡楚生暨潮籍电影名人史迹馆在广东汕头开馆
  20. MES--仓库管理(采购收货)

热门文章

  1. Android之用netcfg命令获取手机虚拟网卡tun0的信息
  2. Android之Intent.ACTION_MEDIA_SCANNER_SCAN_FILE:扫描指定文件
  3. java string类api_java基础—String类型常用api
  4. 试卷代号6098计算机应用基础,2231电大《Visual Basic程序设计》试题和答案200507
  5. php的_auto,AutoPHPCheck下载
  6. python随机生成100内的10个整数_用python随机生成数字教程_如何用Python编程随机产生10个随机整数,并输出这10个整数的和�9�3...
  7. 颠覆认知!完美赌徒,到底是如何用数学打造经济神话?!
  8. 如何用Python进行数据探索,探索竞赛优胜方案?
  9. 剑桥大学的下午茶,为何能喝出六十位诺贝尔奖获得者?
  10. java定义接口_一文知道Java中接口的定义