6.1 介绍
- 智能指针解决的问题
(1)内存泄漏:内存手动释放,使用智能指针可以自动释放
(2)共享所有权指针的传播和释放,比如多线程使用同一个对象时析构问题 - C++11中的智能指针种类
(1)unique_ptr独占对象的所有权,由于没有引用计数,因此性能较好。
(2)shared_ptr共享对象的所有权,但性能略差。
(3)weak_ptr配合shared_ptr,解决循环引用的问题。
6.2 C++11支持的智能指针
6.2.1 shared_ptr
- 内存模型
shared_ptr 内部包含两个指针,一个指向对象,另一个指向控制块(control block),控制块中包含一个引用计数(reference count), 一个弱计数(weak count)和其它一些数据。
上图所示为shared_ptr使用时的内存情况。 - shared_ptr使用场景1:使用智能指针可以自动释放占用的内存