条款19:设计class犹如设计type
Treat class design as type design
设计一个新的class就像设计了一个新的类型,设计一个优秀的class必须考虑下列问题:
- 新的对象应该如何被创建和销毁? 这影响到类的构造函数,析构函数以及内存的分配函数和释放函数。
- 对象的初始化和对象的赋值该有什么样的差别? 这决定了构造函数和赋值操作符的行为,以及他们的差异。
- 新的type如果被pass by value(值传递),意味着什么? 这会影响到复制构造函数的实现。
- 什么是新type的“合法值”? 决定了成员函数必须作哪些检查工作,和异常处理
- 你的新type需要配合某个继承图系吗? 主要影响关于虚函数的讨论
- 你的新type需要什么样的转换? 是否需要自己编写转换函数且注意显式转换和隐式转换的区别
- 什么样的操作符和函数对此新type而言是合理的? 关系到你成员函数的设计和操作符重载
- 什么样的标准函数应该被驳回? 见条款6
- 什么是新的type未声明的接口?
- 你的新type有多么一般化?
- 你真的需要定义一个新type吗? 有时候添加一个友元函数或成员函数便能解决的问题就不需要再设计一个新type
以上问题不容易回答,但作为一个优秀类的设计者,必须尽力去思考这些问题。
请记住
Class的设计就是type的设计。在定义一个新type之前,请你确定已经考虑过本条款覆盖所有讨论主题。