《Effective C++》- 极精简版 11-20条

         本文章属于专栏- 概述 -《业界C++进阶建议整理》-CSDN博客


      本文列出《Effective C++》的11-20条的个人理解的极精简版本。

  • 11、在operate=中处理自我赋值(例如代码 a = a)
    • 绝大部分情况下,类的成员变量以及自身的operate=都是默认的,不用关心这个问题
    • 如果operate=是自定义的,且不希望a = a时走自定义逻辑,就先判断this指针和输入的地址是否一样,一样则直接返回。或者栈上新建一个对象a',和a进行swap
  • 12、复制对象勿忘每个成分
    • 当有基类时,需要调用基类的operator=
    • 另外拷贝构造和赋值构造,不要相互调用,没有物理意义。如果有共同逻辑就抽象一个函数代码
  • 13、以对象管理资源
    • 使用shared_ptr或者unique_ptr
    • 个人见解:不要用auto_ptr(c++11已废弃,c++17中移除)
  • 14、实现自己的资源管理类时,小心copying行为
    • 仔细思考operate=的写法,一些底部资源,如mutex的operator=是被禁止的。而指针的拷贝,则需要计数,以保证资源正确释放
    • 个人见解:包含mutex的对象不要拷贝或者移动。在应用中,这样的对象一定不是大量了,如果需要,就新建,对整体性能影响不大。如果要传递,就传递对象指针或者引用,而不是本身。
  • 15、在资源管理类中提供对原始资源的访问
    • 个人见解:资源释放类的目的是为了正确的释放资源,但是将原始资源暴露,是有可能出现原始指针被客户使用时,资源管理类把资源释放了。这里需要开发者格外小心。如果获取指针的函数是同步调用没有问题,如果异步调用,可能会有内存泄漏或者遇到空指针;
  • 16、new和delete成对调用
    • new [] + delete [] 或者new + delete
  • 17、以独立的语言,将newed对象放入智能指针
    • fun(shared_ptr<A>(new A), fun2()),对同一行代码,编译器有重新排列顺序的操作顺序的自由度,可能执行顺序是new A、fun2、shared_ptr<A>,如果fun2调用异常,会导致资源泄漏
  • 18、让接口容易被正确使用、而不是误用
    • 个人见解:这是一个经验之谈,没有太多实质性的点,主要是尽量让接口语意明确,类型简单
  • 19、设计class犹如设计type
    • 个人见解:这是一个经验之谈,设计class要考虑创造、销毁、初始化、赋值等
  • 20、输入参数用const引用代替pass-by-value
    • 对内置类型、STL的迭代器、函数对象,使用pass-by-value
    • 其他对象使用const引用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值