《Effective C++》学习笔记(条款19:设计class犹如设计type)

最近开始看《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之前,请确定你已经考虑过本条款覆盖的所有讨论主题

条款20:宁以 pass-by-reference-to-const 替换 pass-by-value

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值