七、智能指针
约 544 字大约 2 分钟
2026-05-11
什么是智能指针,C++中有哪几种智能指针?
智能指针 是一种自动管理动态内存的工具类,用于防止内存泄漏。
c++提供了三种常用的指针 unique,share,weak。
unique独占所有权,指针指向的对象只能有这一个指针。
shared共享所有权,指针可以有多个,每释放一个指针变量,指针计数减少一个,到零时释放被指对象,常用来计数。
weak指针是一种弱指针,不拥有资源,防止循环引用,如果对象在指针还在时被释放,也不会报错,不受影响。
智能指针的实现原理是什么
基于RAII设计理念,通过对象的生命周期管理资源。
是通过类模板封装原始指针实现的,它利用 RAII(资源获取即初始化)机制,在对象生命周期结束时,自动释放资源,避免内存泄漏。
它本质上是一个包装类,重载了解引用操作符‘*’和 成员访问操作符 ->,让它像普通指针一样使用,但可以自动管理资源。
C++11中的智能指针线程安全性
C++11智能指针的线程安全性分为几个层面:
控制块安全性:shared_ptr的控制块(包含引用计数、弱计数等)使用原子操作,保证多线程环境下引用计数的正确性。
指针本身操作:对同一个shared_ptr实例的写操作需要同步,读操作可以并发。
指向对象安全性:智能指针不保证其管理对象的线程安全,用户需要自行同步。
不同类型智能指针:
shared_ptr:控制块线程安全,实例操作需同步
unique_ptr:移动操作非线程安全
weak_ptr:与shared_ptr类似,控制块线程安全
