条款18:让接口容易被正确使用,不易被误用
欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。
1、许多用户会出现对接口所传实参不对应或者取值范围有问题的错误。这些错误可以因为导入新类型而获得预防,可以通过简单地外覆类型来区别参数类型。(用成熟且经过充分锻炼的classes并封装其内数据比简单使用structs好)
对于限制取值范围常见有两种方法:1、利用enum来限制(但是enum不具备类型安全性,可以被拿来当作一个int使用);2、以静态函数替代对象,表现某个特定的值。
2、限制类型内什么事可做,什么事不可做。(常见的限制是const)尽量令自定义的类型的行为与内置类型的行为保持一致,提供行为一致的接口。
很少有其他性质比得上“一致性”更能导致“接口容易被正确使用,也很少有其他性质比得上”不一致性“更加剧接口的恶化。
3、任何接口如果要求客户必须记住某些事情就可能有错误的倾向。
将原始指针传给tr1::shared_ptr会比将其初始化为null再对它做一次赋值操作更合理。
tr1:;shared_ptr会自动使用它的每个指针专属的删除器,因此消除了”cross-DLL problem“(关于cross-DLL problem详见另一片博文)。