史上最简练的的effective c++(条款18-25)设计与声明
-
条款18——让接口容易被正确使用,不易被误用
保持接口的一致性,以及内置类型的行为兼容;
防止误用,建立新类型以约束用户输入参数,应用智能指针,消除用户资源管理的责任;
shared_ptr可以防范DLL问题(跨DLL的new和delete),应用其诞生的DLL的delete; -
条款19——设计class犹如设计type
考虑创建与销毁(构造、析构)、初始化与赋值(复制构造、赋值运算符)、参数形式、参数合法性、继承性、隐式/显式类型转换、合理操作符、该隐藏的默认函数、成员的显隐性、模板类(一般化); -
条款20——宁以pass-by-reference-to-const替换pass-by-value
传递内置类型、stl的迭代器和函数对象时,用value更高效,自定义类型一般用reference; -
条款21——必须返回对象时,别妄想返回reference
返回reference或者pointer之前确定返回后内存空间里的资源是否还在,资源是否会被再次更改; -
条款22——将成员变量声明为private
从封装的角度讲,只有封装(private)与不封装(public 和protected); -
条款23——宁以non-member\non-friend替换member函数
增加封装性,便于机能扩充(在同一个命名空间里分不同的文件声明实现一个类不同不同的功能集合,命名空间可以跨越文件而类不能) -
条款24——若所有的参数都需要类型转换,请为此采用non-member函数
以operator*为例,只有声明为non-member函数,才能实现两个参数的类型转换; -
条款25——考虑写出一个不抛出异常的swap函数
std::swap的效率成为问题时,可采用特化(注意函数不能偏特化)调用自定义的swap函数增加效率。