Effective C++ 第二章总结
2019-04-28 15:46
96 查看
目录
5、条款9:绝不在构造函数和析构过程中调用virtual函数
6、条款10:令operator=返回一个referece to *this
7、条款11:在operator=中处理“自我赋值” 【补充剑指offer第一题】
1、条款5:了解C++默默编写并调用哪些函数
- 默认构造函数,拷贝构造函数,赋值操作符,以及析构函数。
2、条款6:若不想使用编译器自动生成的函数,就该明确拒绝
[code]class Uncopyable { protected: Uncopyable() {}; Uncopyable() {}; private: Uncopyable(const Uncopyable&); Uncopyable& operator=(const Uncopyable&); }; class HomeForSale :private Uncopyable //copy构造函数和赋值操作符不可以调用,默认的已经不存在 { };
- 为使得默认的赋值操作符和拷贝构造函数不再被默认创建,可将相应的成员函数声明为private且不予实现。像上述代码示例一样。
3、条款7:为多态基类声明virtual析构函数
- 多态时要把基类的析构函数定义虚析构函数,原因时因为基类指针若指向派生类对象,当释放内存时,若基类不声明为虚析构函数,只会调用基类析构函数,不会释放派生类的内存,从而导致内存泄漏。
- 若不是多态情况下,基类析构函数就不该定义为虚析构函数。
4、条款8:别让异常逃离析构函数
- 析构函数绝对不要吐出异常,若在析构函数中发生了异常,则应该使用try-catch捕捉异常,然后吐下异常或结束程序。
- 如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。
5、条款9:绝不在构造函数和析构过程中调用virtual函数
- 构造函数中不能使用虚函数,原因:基类的构造函数中可能会使用派生类中的虚函数,那么由于此时派生类中的成员对象未被初始化,就会造成错误。
- 析构函数中不能使用虚函数,原因:析构函数可能已经释放了对象的内存,此时若再调用虚函数会出现错误。
6、条款10:令operator=返回一个referece to *this
7、条款11:在operator=中处理“自我赋值” 【补充剑指offer第一题】
[code]CMyString& CMyString::operator = (const CMyString &str) { if (this != &str) //判断str是否为this { CMyString strTemp(str); //创建str的副本strTemp char* pTemp = strTemp.m_pData; //交换this和strTemp中的data数据 strTemp.m_pData = m_pDat 4000 a; m_pData = pTemp; } }
8、条款12:复制对象时毋忘其每一个成分
- 创建派生类对象时,派生类的构造函数中记得调用基类构造函数初始化基类成员变量+派生类成员变量。
相关文章推荐
- Effective c++ 第二章总结
- Effective C++ 第二章 理解&总结
- C++中的内存管理——对effective c++第二章的总结
- 编程珠玑学习笔记三 第二章总结
- effective C++——第二章:构造、析构和赋值(item11~item17)
- 《信息检索导论》第二章总结
- 第二章后续部分代码,总结
- 第二章知识点总结导图
- 算法竞赛入门经典第二章上机以总结
- Windows核心编程之核心总结(第二章 字符和字符串处理)(2018.5.27)
- 第二章 第十节 总结
- <<UNIX环境高级编程>>学习总结——第二章:UNIX标准化及实现
- Java编程思想(第四版)第二章围绕对象展开的一些要点总结
- Effective C++ 读书总结
- 数理统计总结篇第二章
- 算法竞赛入门经典 第二章总结
- 【软考学习】第二章总结——操作系统基础知识
- 《跟老男孩学linux运维》第二章“秒懂”总结
- 《编译原理》总结 第二章
- effective c++ 条款23总结: 必须返回一个对象时不要试图返回一个引用