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

特点
- 共享所有权的智能指针。多个shared_ptr指向同一对象
- 可赋值构造(CopyConstructible)
- 可复制赋值(CopyAssignable)
- 数据访问非线程安全
- shared_ptr 的控制块是线程安全
应用场景
-
共享资源:当多个指针需要共享同一个资源时,可以使用
shared_ptr。这种情况下,shared_ptr会维护一个引用计数,跟踪有多少个指针指向相同的资源。只有当最后一个shared_ptr被销毁时,资源才会被释放。 -
动态内存管理:
shared_ptr可以用于管理动态分配的内存。它会自动跟踪资源的引用计数,当没有指针引用该内存时,自动释放内存,避免内存泄漏。 -
异常安全性:
shared_ptr可以提供异常安全性。在函数中使用shared_ptr管理资源时,即使发生异常,也可以确保资源的正确释放,避免资源泄漏。 -
循环引用的处理:在存在循环引用的情况下,使用
shared_ptr可以解决内存泄漏的问题。shared_ptr使用强引用计数,只有当引用计数为零时,才会释放资源,因此可以处理循环引用并正确释放相关资源。 -
STL 容器的元素:
shared_ptr可以作为 STL 容器(如vector、list、map等)中的元素类型,方便地管理容器中的动态分配对象。
需要注意的是,由于 shared_ptr 维护引用计数,它会带来一定的性能开销。当不需要共享所有权或资源生命周期可以明确控制时,可以考虑其他智能指针类型,如 unique_ptr。