前言
在C++程序中,内存分为三种静态内存、栈内存、堆内存。其中静态内存和栈内存由系统进行维护,而堆内存则是由程序员自己进行维护,也就是我们在new和delete对象时,这些对象存放的区域。任何有C++开发经验的人都知道,在程序中new 和 delete必须成对使用,当我们动态申请的对象不再使用时,一定要记得使用delete释放,不然就会造成内存泄漏。然而,在程序最容易出现的问题就是,记得申请而忘记了释放;还有一种是其他引用还在使用,结果提前释放引发了内存引用异常……。
于是为安全使用动态内存,在C++ 11中,新增了指针神器——智能指针。智能指针能自动在生命周期结束后负责对内存资源进行释放。
定义智能指针的三个类全部定义在memory头文件中。它们分别是
- shared_ptr
:共享指针,允许多个指针指向同一对象 - unique_ptr
:独占指针,该指针独占所指向的对象 - weak_ptr
:弱引用,指向shared_ptr所管理的对象。