一 让接口更容易被正确使用,不易被误用:
(1)“促进接口正确使用”的方法:接口的一致性以及与内置类型的行为兼容。
(2)“阻止误用”的方法:建立新类型、限制类型上的操作、束缚对象值以及消除客户的资源管理责任。
(3)tr1::shared_ptr支持定制的删除器(仿函数),可用来自动解除互斥锁等。
二 设计class犹如设计type:
*应该和语言设计者当初设计语言内置类型一样的谨慎来研讨class的设计。
三 宁以pass-by-reference-to-const替换pass-by-value:
(1)尽量以pass-by-reference-to-const替换pass-by-value。前者:高效;可避免对象切割问题。
(2)上述规则不适用于内置类型,以及STL的迭代器和函数对象。对于它们,pass-by-value往往比较适当。
四 必须返回对象时,别妄想返回其reference:
(1)绝不要返回pointer或reference指向一个local stack对象。
(2)绝不要返回reference指向一个heap-allocated对象。
(3)绝不要返回pointer或reference指向一个local static对象而有时可能同时需要多个这样的对象。
五 将成员变量声明为private:
(1)将成员变量声明为private的好处:一致性;可细微划分访问控制、封装性(更大实现弹性)。
(2)从封装角度看,其实只有两种访问权限:private(提供封装)和其他(不提供封装)。protected并不比public更具封装性。
六 宁以non-members、non-friend替换member函数:
*宁以non-members、non-friend替换member函数:可以增加封装性、包裹弹性(packaging flexibility)和机能扩充性。
七 若所有参数都需要类型转换,请为此采用non-member函数:
(1)只有参数被列于函数的参数列内,这个参数才是隐身转换的合格参与者。
(2)如果需要为某个参数的所有参数进行类型转换,那么这个函数必须是个non-member(member函数的*this不在参数列表,不是隐式转换的合格参与者)。
八 考虑写出一个不抛异常的swap函数:
待续...