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不会改变指针的类型,同时也不会改变指针的大小

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

被折叠的 条评论
为什么被折叠?



