Effective C++系列文章:
Effective C++ 2 构造/析构/赋值运算 条款5-条款12
Effective C++ 3 资源管理 条款13-条款17
Effective C++ 4 设计与声明 条款18-条款25
条款18 让接口容易被正确使用,不易被误用
条款19 设计class犹如设计type
- 新type的对象应该如何被创建和销毁:operator new,operator new[],operator delete,operator delete[]
- 对象的初始化和对象的复制应该有什么样的差别:构建函数、赋值操作符
- 新类型的对象如果被值传播(passed by value)意味着什么:copy构造函数定义
- 什么是新type的合法值:
- 新type继承图系:特别注意virtual和non-virtual;如果允许其他函数继承,决定你的析构函数是否应该为virtual
- 你的新type需要什么样的转换:关注一下explicit关键字
- 谁该取用新type的成员:决定public/protected/private
- 什么是新type的“未声明接口”:接口对效率/异常安全性/资源运用提供何种保证
条款20 传参:宁以只读引用替换值传参
- 函数参数都是以实际实参的副本为初值,调用端所获得的亦是函数返回值的一个副本,这些副本是对象拷贝构造函数产生,使得值传参十分耗时。
调用6次拷贝构造和6次析构函数(Student,Person,string),所以建议使用只读引用: - 以引用方式传递参数可以避免对象切割问题,当一个继承类对象以值参方式传递并被是为一个基类对象,基类的拷贝构造函数就会被调用,导致继承类对象只有基类特性。
解决方法:以只读引用方式传递参数:
3. 对与内置类型(如int),可能使用值传参会更加高效。
条款21 返回值:必须返回对象时,别返回其引用
-
on-the-stack:如果直接返回对象引用,因为返回之前就已经销毁了引用变量,导致返回的是一个随机值。
-
on-the-heap:如果使用一个指针指向被引用的对象,会导致因为无法获得被指向的引用指针对new的内容进行delete进而导致内存泄漏。
4.5 条款22 将成员变量声明为private