1. 实现方式

通过拷贝赋值运算符operator =来实现,实际上是重载运算符(函数),其名字由关键字 operator 接表示要定义的运算符的符号组成。赋值运算符通常应该返回一个指向其左侧运算对象的引用。

eg.

class Foo{public:Foo& operatoe=(const Foo&);
}Sales_data & Sales_data::operator=(const Sales_data &rhs)
{bookNo = rhs.bookNo;units_sold = rhs.units_sold;revenue = rhs.revenue;return *this;
}

2. 功能

赋值运算符组合了析构函数和构造函数的操作:

  • 类似析构函数,赋值操作会销毁左侧运算对象的值
  • 类似拷贝构造函数,赋值操作会从右侧对象拷贝数据
class Hasptr{public:Hasptr(const std::string &s=std::string()):ps(new std::string(s)),i(0){}Hasptr(const Hasptr &p):ps(new std::string(*p.ps)),i(p.i){}Hasptr& operator=(const Hasptr&);~Hasptr(){delete ps;}
private:std::string *ps;int i;
}Hasptr& Hasptr::operator = (const Hasptr &rhs)
{auto newp =  new string(*rhs.ps); //拷贝底层的stringdelete ps;     //释放旧内存ps = newp;      //右侧对象拷贝数据到本对象i = rhs.i;return *this;  //返回本对象
}

3. 注意

如果将一个对象赋予自身,赋值运算符必须能正常工作。假如异常发生时,得有throw try(能将左侧运算对象置于一个有意义的状态)

//如果不检查自身赋值,试问如下代码将会发生什么?
Hasptr& Hasptr::operator = (const Hasptr &rhs)
{delete ps;     //释放旧内存auto newp =  new string(*rhs.ps);   //拷贝底层的string i = rhs.i;return *this;  //返回本对象
}

C++ Primer 5th笔记(chap 13 拷贝控制)拷贝赋值函数相关推荐

  1. c++ primer 5th,习题13.3 答案是不是错了?(未解决)

    c++ primer 5th,习题13.3 答案是不是错了?如下: 这两个类都未定义拷贝构造函数,因此编译器为它们定义了合成的拷贝构造函数.合成的拷贝构造函数逐个拷贝非 const成员,对内置类型的成 ...

  2. 拷贝构造函数和赋值函数的一些知识

    /*******************拷贝构造函数和赋值运算符重载有以下两个不同之处***************************/ 1.拷贝构造函数生成新的类对象,而赋值运算符不能. 2. ...

  3. 构造函数、拷贝构造函数、赋值函数和析构函数

    文章目录 一.构造函数 1.认识构造函数 2.初始化列表 二.拷贝构造函数 1.类对象的拷贝 2.浅拷贝和深拷贝 三.赋值函数 四.析构函数 1.认识析构函数 2.销毁,清理? 3.析构函数来阻止该类 ...

  4. 构造函数,拷贝构造函数,赋值函数

        C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个 ...

  5. C++——拷贝构造函数和赋值函数的注意点

    每个类只有一个赋值函数,由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视. 1.如果不主动编写拷贝构造函数和赋值函数,编译器将以"位拷贝"的方式自动 ...

  6. 基础备忘:拷贝构造函数和赋值函数

    3.1 拷贝构造函数概述 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同 ...

  7. 拷贝构造函数和赋值函数(转)

    标签: 无标签 原帖地址:http://www.programfan.com/blog/article.asp?id=10944 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象 ...

  8. 拷贝构造函数和赋值函数

    3.1 拷贝构造函数概述 现在我们来学习一种特殊的构造函数--拷贝构造函数. 对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同 ...

  9. C++ Primer 5th笔记(chap 13 拷贝控制)合成的移动操作

    1. 出现条件 只有当一个类没有定义任何自己版本的拷贝控制成员,且类的每个非 static 数据成员都可以移动,编译器才会为它合成构造函数或移动赋值运算符. struc X{int i;std::st ...

  10. C++ Primer 5th笔记(chap 13 拷贝控制)三五法则

    1. 三个基本操作可以控制类的拷贝操作 • 拷贝构造函数 • 拷贝赋值运算符 • 析构函数. 新标准还有2个函数: • 移动构造函数(move constructor) • 移动赋值运算符(move- ...

最新文章

  1. 王者荣耀活动精选 Blink 第三弹来袭!
  2. Java学习_day005:循环结构
  3. 数据库集群技术 -摘自网络
  4. 2020年高等数学方法与提高(上海理工大学)学习笔记:一元函数微分学
  5. android 源码各版本下载 原生纯净版
  6. HTML基础-张晨光-专题视频课程
  7. execve系统调用_张凯捷—系统调用分析(3) (基于最新Linux5.0版本系统调用日志收集系统)...
  8. Java LocalDate类| 带示例的getDayOfYear()方法
  9. 金兄的境界:我的名字搜索终于出来了。重要信息声明,并永久置顶。我的博客在零网zeronet...
  10. php通过函数怎么禁止百度蜘蛛抓取,怎么屏蔽百度蜘蛛抓取网站?
  11. 如果一个人不喜欢争,不喜欢计较,只知道退让,是不是真的傻?
  12. 1.1 线性模型基础
  13. 自适应的设置字体的方式
  14. 【python路上小记】匹配11位电话正则表达式
  15. 怒了,以后有文件保存到网上
  16. python nltk 8 分析句子结构
  17. 海军领域搜狗细胞词库
  18. 榜单!DMS/OMS高增速,舱内感知交互摄像头供应商TOP10
  19. 资源管理器清楚WPS网盘、百度网盘方法
  20. The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path

热门文章

  1. mysql root 权限注入_Mysql注入root权限直接写一句话马
  2. python资源百度云_Python Selenium 百度云分享链接资源 批量保存
  3. 野火 stm32f429 pcb_PCB板价格是如何核算的
  4. 成功解决Eclipse窗口布局混乱或者Eclipse窗口布局出现单独独立小窗口的问题(图文教程)
  5. Python之pandas:pandas中to_csv()、read_csv()函数的index、index_col(不将索引列写入)参数详解之详细攻略
  6. Python:利用collections库实现统计单个字或单个字母的频率统计并进行降序输出、统计一个列表内重复元素并以字典形式输出
  7. AI公开课:19.04.18俞益洲—深睿医疗CS《计算机视觉的应用与落地》课堂笔记以及个人感悟
  8. Matlab:成功解决引用了已清除的变量 handles
  9. BlockChain:Python一步一步实现(流程最清楚)区块链底层技术流程图(理解一目了然,值得收藏)
  10. 决定系数R2真的可靠吗?