Effective C++ 第十八条 Make interface easy to use correctly and hard
让接口容易被使用正确,不易被误用
当我们在为客户设计接口的时候,需要考虑到客户可能会犯的错误,尽量将接口设计成一旦客户使用错误就报错,没报错就是客户使用正确。
以日期为例
这样的设计没有问题,但是客户可能会 Date(30,3,1999),也就是 month 和 day 的顺序反了,也有可能出现 Date(2,30,2000) 这样的错误(2月没有30号)。该问题能够出现是因为 day、month、year 都是 int 型,容易混淆,我们可以把 day、month、year 封装为 struct ,这样就不会出现顺序混乱的错误
还可以通过用 “函数” 替换 “对象” 的方式来表示某个特定的月份
这里 Year 和 Day 并不需要如此设计,一是因为数量太多,枚举太复杂,再者采用结构体封装的方法已经足够了并不会犯其他错误。
保持接口的一致性
当我们设计多个类的时候,应当让一些类的合理的操作保持一样的接口,比如 STL 中的 vector 拥有 size(),其他容器如果拥有 size 是合理的那么也有一个 size 接口。不能对于 A 写一个 size,对于 B 写一个 length,这样对于开发者来说记忆负担加重,也毫无必要。
携带删除器
我们使用指针的时候,使用 shared_ptr 会自带一个删除器,它的好处在于当我们在一段代码中取得资源但是不需要释放的时候,被其他代码delete了,这样会导致错误。有删除器的话,会设置一个计数器,一个地方释放资源并不会真正地将资源释放,而是计数器减一,只有当真正计数器为0的时候资源才会被释放。