Effective C++系列文章:

Effective C++ 2 构造/析构/赋值运算 条款5-条款12
Effective C++ 3 资源管理 条款13-条款17
Effective C++ 4 设计与声明 条款18-条款25

条款18 让接口容易被正确使用,不易被误用

Effective C++ 4 设计与声明 条款18-条款25

条款19 设计class犹如设计type

  1. 新type的对象应该如何被创建和销毁:operator new,operator new[],operator delete,operator delete[]
  2. 对象的初始化和对象的复制应该有什么样的差别:构建函数、赋值操作符
  3. 新类型的对象如果被值传播(passed by value)意味着什么:copy构造函数定义
  4. 什么是新type的合法值:
  5. 新type继承图系:特别注意virtual和non-virtual;如果允许其他函数继承,决定你的析构函数是否应该为virtual
  6. 你的新type需要什么样的转换:关注一下explicit关键字
  7. 谁该取用新type的成员:决定public/protected/private
  8. 什么是新type的“未声明接口”:接口对效率/异常安全性/资源运用提供何种保证

条款20 传参:宁以只读引用替换值传参

  1. 函数参数都是以实际实参的副本为初值,调用端所获得的亦是函数返回值的一个副本,这些副本是对象拷贝构造函数产生,使得值传参十分耗时。
    Effective C++ 4 设计与声明 条款18-条款25
    Effective C++ 4 设计与声明 条款18-条款25
    调用6次拷贝构造和6次析构函数(Student,Person,string),所以建议使用只读引用:
    Effective C++ 4 设计与声明 条款18-条款25
  2. 以引用方式传递参数可以避免对象切割问题,当一个继承类对象以值参方式传递并被是为一个基类对象,基类的拷贝构造函数就会被调用,导致继承类对象只有基类特性。
    Effective C++ 4 设计与声明 条款18-条款25
    Effective C++ 4 设计与声明 条款18-条款25

解决方法:以只读引用方式传递参数:
Effective C++ 4 设计与声明 条款18-条款25
3. 对与内置类型(如int),可能使用值传参会更加高效。

条款21 返回值:必须返回对象时,别返回其引用

  1. on-the-stack:如果直接返回对象引用,因为返回之前就已经销毁了引用变量,导致返回的是一个随机值。
    Effective C++ 4 设计与声明 条款18-条款25

  2. on-the-heap:如果使用一个指针指向被引用的对象,会导致因为无法获得被指向的引用指针对new的内容进行delete进而导致内存泄漏。
    Effective C++ 4 设计与声明 条款18-条款25
    Effective C++ 4 设计与声明 条款18-条款25

4.5 条款22 将成员变量声明为private

相关文章:

  • 2021-10-16
  • 2021-10-16
  • 2021-11-02
  • 2020-05-20
  • 2021-12-29
  • 2021-03-25
  • 2021-12-12
猜你喜欢
  • 2018-09-20
  • 2021-09-02
  • 2021-09-02
  • 2021-09-02
  • 2021-11-13
  • 2021-09-02
  • 2021-10-16
  • 2021-10-16
相关资源
相似解决方案