文章目录
- 一、智能指针基础知识
- 二、不带引用计数的智能指针
-
- auto_ptr
- scoped_ptr
- unique_ptr
- 三、带引用计数的智能指针
-
- 模拟实现一个带引用计数的智能指针
- shared_ptr交叉引用问题
- 四、多线程访问共享对象的线程安全问题
- 五、智能指针删除器
- 六、建议用make_shared代替new
一、智能指针基础知识
裸指针的缺陷:
- 忘记
delete
释放资源,导致资源泄露 - 在
delete
之前程序就正常退出(比如满足if
中的return
)或者异常退出,还没来得及delete
,导致资源泄露 - 同一资源释放多次,导致释放野指针,程序崩溃
这时,就需要智能指针了。智能指针的智能二字,主要体现在用户可以不关注资源的释放,因为智能指针会帮你完全管理资源的释放,它会保证无论程序逻辑怎么跑,正常执行或者产生异常,资源在到期的情况下(函数作用域或程序结束),一定会进行释放
我们来自己实现一个简单的智能指针
template