- 强制不能 赋值或拷贝构造:copy构造函数 和 copy assignment 操作符 可声明为private ,并且可以不实现,,如果防止子类拷贝,可private继承 已经禁止了的父类
- 没特殊要求,参数等尽量用const
- 带多态性质的基类,应该声明一个virtual 析构函数,如果一个类带任何virtual函数,那么应该拥有一个virtual析构
- 类的设计目的如果不是作为基类使用,或者为了不具备多态性,那么就不该声明virtual析构函数
- 抽象类时,如果找 不到一个很好的纯虚函数,可考虑吧析构函数 声明为纯许函数
- operator = 返回 *this的目的是,为了方便连续=操作,比如 a=b=c;
- operator = 中 处理自我 赋值 如 a=a;
- copy函数应该确保 对象内所有变量都被安全复制 以及基类
- 多个copy函数,公共部分太多,可尝试 提取出来一个private函数
- 为防止资源泄露,尽量使用RAII对象,他在构造函数中获得资源,并且在析构中 释放资源
- new[] 时候对应delete[] ,new 对应delete
- 导入新类型,以防止接口 被乱用,P79
- 好的接口很容易被正确使用,不容易被误用,你应该在你所有的接口中努力达成这些性质
- 促进“正确使用 ”的办法包括接口的统一性一致性,以及与内置类型的行为兼容
- “阻止误用”的办法包括建立新类型,限制类型上的操作,束缚对象值,消除客户的资源管理责任
- class的设计就是type的设计
- 传参数包含对象时,尽量使用reference,可避免大量没必要的拷贝等工作,特别是多态的时候,传递会被切割,但STL传值会更适合
- 成员变量public 和protect 都会破坏封装性,如果成员变量被改变,那么被破坏的代码,将不可预知
- protect并不比public 更有封装性,特别是在多态的情况
- 切记成员变量声明为private,这可以赋予客户访问数据的一致性,可细微划分访问控制,允诺约束获得保证,并提供class作者充分实现弹性
- 隐式转换可以发生基本类型和自定义类型之间,只要自定义类型有对应的构造函数
- 尽可能延后变量等 的定义,因为可能白话析构构造代价,提高程序的清晰度和改善程序效率
- 抛出异常前,确认资源已被安全释放
- 将inline谨慎使用,限制在小型,经常被调用的函数。可使调试和二进制升级更容易,潜在代码膨胀问题最小化 ,程序速度提升最大化
- pImpl P145 条款:实现
- 支持“编译依存性最小化”的一般构想是,依赖于声明,不要依赖定义,基于此构想的两个手段是handle classes 和 interface classes
- 程序库头文件应该以“完全切仅有声明” 的形式存在,这种做法不论是否涉及template都适用
- public继承是 is-a 关系,子类对象 也是一个父类对象 ,比如黄种人 是 人 ,所以黄种人可以继承自人
- derived class 内的名称 会遮挡 base class 内的名称,在public继承下从来没有人希望如此
- 为了被遮挡的名称再见天日,可使用using 声明式或转交函数。
Scroll Up