Make interface easy to use correctly and hard to use incorrectly
动机
在C++中,有各种各样可以让你与代码交互的接口,但有时候一些接口的滥用会导致不必要的麻烦,因此我们要开发一个健壮的接口。
比如一个类:
1 | class Date{ |
这种构造函数有一个问题是它可能传入一些不合法的天数或者月份,或者不小心将day和month交换
解决方法
因此我们可以用类来进行封装。
1 | class Date{ |
另一个守则是,任何让客户必须记得做某些事情,就可能出现“不正确使用”的倾向,例如要求new出来的原始资源必须客户记得手动删除就不是一个很好的使用方式,应该用智能指针去接管资源。
建议
- 保证接口的一致性,以及与内置类型的行为兼容;
- “阻止误用”的方法包括建立新类型(用类去封装),限制类型上的操作(禁止对a*b赋值),束缚对象值,以及消除客户的资源管理责任(用智能智能管理资源);