【Effection C++】读书笔记 条款18~条款19

【Effective C++】Part4 设计与声明

条款18:让接口容易被正确使用,不易被误用

  1. 好的接口容易被正确使用,不易被误用
  2. 促进正确使用的方法包括有接口的一致性,以及与内置类型的行为兼容
  3. 阻止误用的方法包括有: 建立新的类型,限制类型上的操作,束缚对象的值,以及消除客户的资源管理责任。
  4. shared_ptr支持自定义删除器,这可以防范DLL问题。

条款19:设计class犹如设计type

要设计一个良好的class,需要思考以下问题:

  1. 新types对象应该如何被创建和销毁?

    涉及到构造函数,析构函数,内存分配和释放函数(operator new,operator new[],operator delete,operator delete[])的设计

  2. 对象的初始化和对象的赋值该有怎样的差别?

    涉及到构造函数和赋值操作符的行为以及它们的差异

  3. 新type的对象如果如果被pass-by-value(以值传递),意味着什么?

  4. 什么是type的合法值?

    对于class的成员变量而言,可能只有某些数据集是有效的,此时某些成员函数(特别是构造函数,赋值操作符和”setter”函数)必须进行的错误和检查工作,它也影响函数抛出的异 常,以及(极少使用的)函数异常明细列.

  5. 你的type需要配合某个继承图系(inheritance graph)吗?

    如果设计的type继承自某些类,就会收到哪些类的”函数是virtual或non-virtual”的影响;

    根据是否设计的type是否被继承,判断所声明的函数(尤其是析构函数)是否为虚.

  6. 你的新types需要什么样的转换?

    如果需要隐式转换,可以重载类型转换函数或允许non-explict-one-arguement(非explict单实参)构造函数.如果只允许显示转换,就专门写出负责执行转换的函数,且禁止类型 转换操作符和non-explict-one-arguement(非explict单实参)构造函数

  7. 什么样的操作符和函数对此新type而言是合理的?

  8. 什么样的标准函数应该驳回?

    声明为private或只声明不定义.(具体见条款6)

  9. 谁该取用新type的成员?

    决定哪些成员为public,哪些为protect,哪些为private,那些类和函数是friends,以及将它们嵌套于另一个之内是否合理.

  10. 什么是新type的未声明接口?

    明确它对效率,异常安全性(见条款29),以及资源运用(例如多任务锁定和动态内存)提供何种保证.

  11. 你的新type有多么一般化?

    判断是否直接定义一个新的class template.

  12. 你真的需要一个新type吗?

    如果只是为已有类添加新功能,说不定单纯定义一个或多个non-member函数或template即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值