图解shared_ptr共享智能指针原理分析

kongyijin / 2023-05-12 / 原文

shared_ptr共享智能指针

  shared_ptr 是 C++ 标准库提供的智能指针类型之一,它用于管理动态分配的资源,并在多个指针之间共享所有权。

 

 

  特点

  • 共享所有权的智能指针。多个shared_ptr指向同一对象
  • 可赋值构造(CopyConstructible)
  • 可复制赋值(CopyAssignable)
  • 数据访问非线程安全
  • shared_ptr 的控制块是线程安全

  应用场景

  1. 共享资源:当多个指针需要共享同一个资源时,可以使用 shared_ptr。这种情况下,shared_ptr 会维护一个引用计数,跟踪有多少个指针指向相同的资源。只有当最后一个 shared_ptr 被销毁时,资源才会被释放。

  2. 动态内存管理:shared_ptr 可以用于管理动态分配的内存。它会自动跟踪资源的引用计数,当没有指针引用该内存时,自动释放内存,避免内存泄漏。

  3. 异常安全性:shared_ptr 可以提供异常安全性。在函数中使用 shared_ptr 管理资源时,即使发生异常,也可以确保资源的正确释放,避免资源泄漏。

  4. 循环引用的处理:在存在循环引用的情况下,使用 shared_ptr 可以解决内存泄漏的问题。shared_ptr 使用强引用计数,只有当引用计数为零时,才会释放资源,因此可以处理循环引用并正确释放相关资源。

  5. STL 容器的元素:shared_ptr 可以作为 STL 容器(如 vectorlistmap 等)中的元素类型,方便地管理容器中的动态分配对象。

    需要注意的是,由于 shared_ptr 维护引用计数,它会带来一定的性能开销。当不需要共享所有权或资源生命周期可以明确控制时,可以考虑其他智能指针类型,如 unique_ptr