码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Effective C++ 阅读笔记 02:构造/析构/赋值运算


    文章目录

    • 条款05:了解C++默认编写和调用了哪些函数
      • 请记住
      • 我的理解
    • 条款06:显示地拒绝哪些你并不想使用的编译器自动生成的函数
      • 请记住
      • 我的理解
    • 条款07:为多态基类声明*virtual*析构函数
      • 请记住
      • 我的理解
    • 条款08:不要在析构函数中写异常(书上翻译很奇怪,我改了下说法)
      • 请记住
      • 我的理解
    • 条款09:不要在构造和析构过程中调用*virtual*函数
      • 请记住
      • 我的理解
    • 条款10:operator=应该返回*reference to *this*
      • 请记住
      • 我的理解
    • 条款11:operator=应该能处理给自己赋值
      • 请记住
      • 我的理解
    • 条款12:复制对象时保证复制完全
      • 请记住
      • 我的理解

    条款05:了解C++默认编写和调用了哪些函数

    请记住

    编译器会缺省地为类创建默认构造函数、复制构造函数、赋值复制操作符以及析构函数。

    我的理解

    确实如此。


    条款06:显示地拒绝哪些你并不想使用的编译器自动生成的函数

    请记住

    为实现这一条款,可以将相应的成员函数声明为private,并且不予实现。

    我的理解

    这种情况出现于单例模式等现象中,比如我们不希望实例出现多份副本,那么我们就要按照如上所说的,禁止掉缺省的复制与辅助操作。


    条款07:为多态基类声明virtual析构函数

    请记住

    • 多态基类应该声明虚析构函数。如果类带有任何虚函数,那么析构函数应该也是虚的。
    • 如果不是做虚基类,就不要声明虚析构函数。

    我的理解

    简单来说,当且仅当声明虚基类时,使用虚析构函数。
    如果是虚基类,那么在派生类调用析构函数时,会先调用虚基类的析构函数,如果该函数非虚,那么后果很可能是,基类部分被删除,而派生类部分未被删除(具体原因未知,书41页)。
    如果是非虚基类,使用了虚构造函数,会增加类的负担,也不好。


    条款08:不要在析构函数中写异常(书上翻译很奇怪,我改了下说法)

    请记住

    • 析构函数绝对不要抛出异常。如果一定要处理异常,请写一个catch来处理,或者直接终止程序。
    • 在不同函数中处理运行抛出的异常,而不是析构函数。

    我的理解

    如果生成一个自定义类的向量,在删除该向量时,要调用多次析构函数,如果析构函数会抛出异常,那就很难办了,所以应按照上述两种方法之一来进行解决。


    条款09:不要在构造和析构过程中调用virtual函数

    请记住

    在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class。

    我的理解

    确实如此,遵守就好。


    条款10:operator=应该返回*reference to this

    请记住

    赋值运算符返回一个this指针的解引用的引用

    我的理解

    确实如此,包括+=,-=也是。


    条款11:operator=应该能处理给自己赋值

    请记住

    确保当对象自我赋值时,operator=有良好行为。
    确定任何函数在操作对象为多个,且有可能多个对象指向同一个对象时,行为仍然正确。

    我的理解

    实现这一条款的方法如下:

    Object& operator=(const Object& others) {
    	Object* pOrig = po;	// 记住原先的指针
    	po = new Object(*others.po);	// 将po指向others.po的一个副本
    	delete pOrig;	// 删除原先的指针
    	return *this;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    条款12:复制对象时保证复制完全

    请记住

    • 复制函数要确保复制基类和派生类中的所有内容。
    • 不要用某个copying函数实现另一个copying函数。应该把共同机能放进第三个函数中,并由两个copying函数共同调用。

    我的理解

    轻易不要自己写复制函数,如果要写,一定要小心,确保复制的完全。

  • 相关阅读:
    Spring事务回滚核心源码解读
    葡聚糖-炔基|Alkyne-葡聚糖|提供氨基/羧酸/马来酰亚胺/N-羟基琥珀酰亚胺/叠氮/炔基/巯基功能化葡聚糖
    订单。。。
    TypeScript编译选项
    HBase与Hive数据交互
    零样本文本分类应用:基于UTC的医疗意图多分类,打通数据标注-模型训练-模型调优-预测部署全流程。
    工业蒸汽量预测(速通一)
    V神个人调查报告:哪位圈内名人最受V神尊重?中国受V神喜欢吗?
    Python数据分析--Numpy常用函数介绍(4)--Numpy中的线性关系和数据修剪压缩
    深入解析:探索Nginx与Feign交锋的背后故事 - 如何优雅解决微服务通信中的`301 Moved Permanently`之谜!
  • 原文地址:https://blog.csdn.net/ShowMeTheCod3/article/details/126017184
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号