C++ Super-FAQ 『Assignment Operators』

  • 赋值操作符的关键在于自赋值机制的处理

重载赋值操作符时需要考虑自赋值问题,否则可能会导致严重错误。

Fred& operator= (const Fred& f)

{
      // Bad code: Doesn‘t handle self-assignment!
      delete p_;                // Line #1
      p_ = new Wilma(*f.p_);    // Line #2
      return *this;

}

该例子还有一个错误,若在new中抛出异常,则p_会变成野指针。

赋值操作代码的目的不是为了使自赋值更快。若当前代码能够正常处理自赋值(即使很慢),那就不要讲if语句添加至赋值操作符代码中。因为自赋值极少出现,也就无需使自赋值变得更有效率,增加不必要的if判断会使更多的赋值操作承担额外开销。这就是punishing the many to benefit the few.

  • 派生类的赋值操作符需要调用基类的赋值操作符吗?

若创建了自定义的赋值操作符,则需要显示调用基类的赋值操作符,因为编译器不会自动调用;

若未创建自定义赋值操作符,编译器则会自动调用基类的赋值操作符。

时间: 2024-10-29 12:16:52

C++ Super-FAQ 『Assignment Operators』的相关文章

<Effective C++>读书笔记--Ctors、Dtors and Assignment Operators

<Item 5> Know what functions C++ silently writes and calls 1.If you don't declare them yourself, compilers will declare their own versions of a copy constructor, a copy assignment operator, and a destructor. Furthermore, if you declare no constructo

『昼颜』读后感

『昼颜』读后感       <--故事梗概-->---------------------------------------------------------------------------------------------------   纱和和北野居然恋爱了,仔细想想, 一个是超市的收银员,一个是高中老师,都有充足的时间, 但是,他们都有自己的家庭.   基于自己的最优选择,还是宽容, 后来各自的家庭必须要拆散他们,所以也就用不再见了, 最后,纱和开始了自己独立的生活...  

[TYVJ1827]『Citric II』一道防AK好题

时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 第二届『Citric杯』NOIP提高组模拟赛第一题 描述 Lemon认为在第一届『Citric』杯模拟赛中出的题目太简单了,于是他决定,这次要给参赛选手们一个下马威! ^_^ Lemon手上有一个长度为n的数列,第i个数为xi.他现在想知道,对于给定的a,b,c,他要找到一个i,使得a*(i+1)*xi^2+(b+1)*i*xi+(c+i)=0成立.如果有多个i满足,Lemon想要最小的那个i.Lemon有

Github 恶搞教程(一起『玩坏』自己的 Github 吧)

最近在伯乐在线读到一篇趣文,<如何在 Github『正确』做贡献>,里面各种能人恶搞 Github 的『Public contributions』,下面截取几个小伙伴的战绩: 顺藤摸瓜,发现原来有人已经做出『玩坏』Github 的工具啦,名叫 gitfiti.主要对应预先定义的模板,进行相应日期的 commit 操作,push 至 Github 后在贡献栏中生成相应像素点,并且利用 Github 贡献数不同颜色深度不同的机制,就可以在自己的贡献栏里面看见像素画了.怎么样,是不是心动啦,那么下面

『安全工具』注入神器SQLMAP

原文:『安全工具』注入神器SQLMAP Pic by Baidu 0x 00 前言 正是SQLMAP这种神器的存在,SQL注入简直Easy到根本停不下来.... PS:国内类似软件也有阿D,明小子,挖掘机,当你用过他们之后你才会发现SQLMap才是绝对的注入神器 0x 01 注入原理 *****************************************开始分割线***************************************** 时间原因,这段内容就先不写了 就是因为

Linux基本功杂记——[020]——『Linux Capability』

『Linux Capability』 For the purpose of performing permission checks, traditional UNIX implementations distinguish two categories of processes: privileged processes (whose effective user ID is 0, referred to as superuser or root), and unprivileged proc

零元学Expression Blend 4 - Chapter 35 讨厌!!我不想一直重复设定!!『Template Binding』使用前後的差异

原文:零元学Expression Blend 4 - Chapter 35 讨厌!!我不想一直重复设定!!『Template Binding』使用前後的差异 因为先前写到自制Button时需特别注意Template Binding步骤的部分,有不少网友常常问我差异到底在哪? 所以在这边就特别为了Template Binding做单独的介绍 ? 因为先前写到自制Button时需特别注意Template Binding步骤的部分,有不少网友常常问我差异到底在哪? 所以在这边就特别为了Template

2017-2018-2 165X 『Java程序设计』课程每周成绩公布(0329更新)

2017-2018-2 165X 『Java程序设计』课程 每周成绩公布(0329更新) 本博客将跟随教学进度不定期更新,每次更新后将在课程群公布.如对成绩有疑问,请于公布成绩后的1天之内联系助教,进行审核确认. --------CONTENTS-------- 课下测试 Linux命令基础测试 第一周测试(CH01) 课堂实践 加扣分 Java实验 『总成绩』 第一周 第二周 课下测试 Linux命令基础测试 学号 测试成绩 规格化成绩 Blog 总分 20145209 0 0 0 20155

Java基础-赋值运算符Assignment Operators与条件运算符Condition Operators

Java基础-赋值运算符Assignment Operators与条件运算符Condition Operators 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值运算符 表达式的数据类型要与左边变量的类型兼容 1>.常规赋值 1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:[email protected]