最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!
-
新type的对象应该如何被创建和销毁?
这决定了你如何实现构造函数和析构函数,包括要使用什么方式分配内存和释放内存,即new还是new[],delete还是delete[]。(见条款16)
-
对象的初始化和对象的赋值该有什么样的差别?
这决定你如何实现构造函数和赋值操作符的行为以及其间的差异。重要的是别混淆了”初始化“和”赋值“,因为它们对应于不同函数的调用(见条款4)。
-
新type的对象如果被passed by value,意味着什么?
即copy构造函数用来定义一个type的值传递该如何实现,记住,值传递会生成一份拷贝。
-
什么是新type的“合法值”?
成员函数必须对不合法值进行必要的错误检查
-
你的新type需要配合某个继承体系?
如果你继承自某些既有的类,你就受到那些类设计的束缚,特别是受到”它们的虚函数和非虚函数“的影响(见条款34,36);如果你允许其它类继承你的class,那会影响你所声明的函数,尤其是析构函数——是否为virtual(见条款7)
-
你的新type需要什么样的转换?
新类型的对象将会在程序的海洋中与其它各种各样的类型并用,这时你就要决定是否允许类型的转换。如果你希望把class T1隐式转换为class T2,你可以在class T1中定义一个转换函数,例如operator T2,或者在class T2中定义一个 non-explicit-one-argument 构造函数。如果你只允许explicit构造函数存在,就得写出专门负责执行转换的函数,且不能是类型转换操作符或 non-explicit-one-argument 构造函数。(条款15有隐式和显示转换函数的例子)
-
什么样的操作符和函数对此新type而言是合理的?
这个问题的答案决定class该声明哪些函数,哪些应该是member函数,哪些则不是(见条款23,24,26)。
-
什么样的标准函数应该禁止?
若不想 编译器 提供的构造函数,把它们声明为private(见条款6)
-
谁该取用新type的成员?
这能够决定哪些成员为public、哪些为protected、哪些为private;也能够决定哪个类和函数是友元的以及是否可以嵌套类?
-
什么是新type的“未声明接口”?
它对效率、异常安全性(见条款29)以及资源运用(例如多任务锁和动态内存)提供何种保证?要提供这些保证,class实现代码将加上相应的约束条件,例如要使用智能指针而不要使用裸指针。
-
你的新type有多么一般化?
若你想让你的新类型通用于许多类型,定义一个类模板(class template),而不是单个新类型。
-
你真的需要一个新type吗?
如果只是定义新的derived class以便为既有的class添加机能,那么说不定单纯定义一个或多个non-member函数或者template更能达到目标。
Note:
- Class的设计就是type的设计。在定义一个新type之前,请确定你已经考虑过本条款覆盖的所有讨论主题