智能指针作用

提出智能指针时候,不得不提一下栈和堆。我们都知道,栈上的资源是由系统管理的,申请和释放资源都是由栈的策略来进行的。

而堆上的资源申请,是用户显示的调用关键字new 和 delete来进行申请资源和释放资源,该资源的生命周期是执行new语句申请资源    到执行 delete释放资源。(或者程序结束由系统释放这部分堆资源)。

这时候我们在来谈一下智能指针的作用和原理。

智能指针就是行为类似指针的栈对象,并非指针类型,在栈对象生命周期即将结束时,智能指针通过析构函数释放有它管理的堆内存。这样就能够不用手动释放内存了。

注意

shared_ptr:
跟踪引用特定对象的智能指针数(引用计数)。仅当最后一个指针过期时,才调用delete。
unique_ptr:
建立所有权概念,对于特定的对象,只有一个智能指针可以拥有它,只有拥有对象的智能指针才可以释放它。并且,赋值操作将转让所有权,转让所有权后指针不再指向有效数据。这个过程将会非常严格。