Effective C++ 学习笔记二

Effective C++ 学习笔记二

文章目录

别让异常逃离析构函数

C++ 并不禁止析构函数吐出异常,但他不鼓励你这么做,析构函数吐出异常就会非常危险 ,总会带来过早的结束程序,或者发生不明确的行为的风险

请记住:

  1. 析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下他们或者结束程序。
  2. 如果客户需要对某个操作函数运行期间抛出的异常做出反映,那么class 应该提供一个普通函数执行操作。

绝不在构造和析构的过程中调用virtual函数

  1. base class 构造期间virtual函数绝对不会下降到derived classes 阶层,如果在base class 构造和析构过程中调用virtual函数会调用base class 版本的virtual函数,对于这个有一个更好的说法,由于base class的构造函数执行时 derived class 的成员变量并未初始化,如果此期间调用virtual函数下降至derived class ,要知道derived class 的函数几乎必然取用成员变量,而那些成员变量并未初始化,这将是一张通往不明确行为和彻夜调试大会串的直达车票。
    1. 根本原因:在derived class 对象的base构造期间,对象类型是base class 而不是derived class ,不只是virtual函数会被编译器解析至base class ,若使用运行期类型信息也会把对象视为base class。对象在derived class 构造函数开始执行前不会成为一个derived class对象。
  2. 相同的道理也适用于析构函数,一旦derived class 开始执行,对象内的derived class 成员变量便开始呈现未定义值,进入base class 析构函数后对象也就成为一个base class 对象。
  3. 请记住 在构造和析构期间不要调用virtual 函数,因为这类调用从不下降至derived class

令operator= 返回一个reference to *this

  1. 对了实现连锁赋值,x = y = z = 15 ,赋值操作符必须返回一个reference 指向操作符的左侧实参这是你为classes 实现赋值操作应该遵循的协议。
cpp 复制代码
Widget& operator= (const Widget& rhs){
    return* this;
}

在operator=中处理"自我赋值"

C++四种转换

相关推荐
ST.J12 分钟前
SQL与数据库笔记
数据库·笔记·sql
熊猫钓鱼>_>17 分钟前
2025反爬虫之战札记:从robots.txt到多层防御的攻防进化史
开发语言·c++·爬虫
肥肠可耐的西西公主19 分钟前
后端(JDBC)学习笔记(CLASS 1):基础篇(一)
笔记·学习
oscar9991 小时前
少儿编程C++快速教程之——1. 基础语法和输入输出
c++·基础语法·少儿编程
励志不掉头发的内向程序员1 小时前
从零开始的python学习——文件
开发语言·python·学习
曼巴UE51 小时前
UE5.3 C++ 接口初步使用
开发语言·jvm·c++
泛联新安1 小时前
如何根据项目需求选择合适的软件测试工具?iUnit智能单元测试平台提供专业化解决方案
c++·测试工具·单元测试
曙曙学编程2 小时前
stm32——NVIC,EXIT
c语言·c++·stm32·单片机·嵌入式硬件
liulilittle2 小时前
UNIX/macOS路由表查询原理与实现
服务器·开发语言·c++·macos·unix·编程语言
悠哉悠哉愿意2 小时前
【数学建模学习笔记】无监督聚类模型:分层聚类
笔记·python·学习·数学建模