Effective Modern C++读书笔记 (二) 智能指针,move和 forward

本文是Effective Modern C++的读书笔记,主要探讨了std::unique_ptr的独占语义、禁止拷贝以及与std::shared_ptr的区别;std::shared_ptr的引用计数机制及其对性能的影响;还详细介绍了std::move和std::forward在转移资源所有权时的作用和使用注意事项。最后,提到了空闲指针与野指针的概念。
摘要由CSDN通过智能技术生成

item 18 std::unique_ptr

  • 独占语义
    一个非空的unique_ptr永远独占其指向的对象

  • move-only
    会把所有权从源指针转向目的指针,这时候源指针会指向null
    析构的时候,会delete来释放原生指针指向的空间

  • 拷贝禁止
    std::unique_ptr 不允许拷贝

总结起来:
std::unique_ptr 开销小,速度快。
move-only特定的智能指针使用独占语义管理资源。并且可以轻易转化为shared_ptr。
适合作为工厂函数返回值类型。工厂函数不知道调用者想使用独占性的拥有语义还是共享式的拥有语义(即 std::share_ptr ).通过返回 std::unique_ptr ,工厂函数将选择权移交给了调用者。

item 19 std::shared_ptr

  • 引用计数记录指向资源的std::shared_ptr个数

  • 对性能的影响:
    1.大小是原生指针的两倍大小,内部除了包含一个指向资源的原生指针,还有指向资源的引用计数
    2.引用计数的递增或者递减必须是原子的,这部分会引起一定开销

  • move-construct 比 copy-constructor一个shared_ptr要快,copy需要修改引用计数,拷贝则不需要。

  • 与unique_ptr相比,自定义deleter不会改变指针的类型,同时也不会改变指针的大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值