Skip to the content.

智能指针:从“谁来 delete”到链表的所有权

智能指针的动机是:把释放资源的责任写进对象和类型,让正常返回、提前返回和异常退出都沿用同一套清理规则。

普通指针保存地址,但从 Node* p 本身看不出:这是借来的地址,还是需要你负责释放的对象? 智能指针把“能访问”与“负责生命周期”区分开。

按下面的顺序阅读,示例采用 C++17:

  1. 动机与三种智能指针:手动管理哪里容易出错,所有权为什么要进入类型。
  2. 用 unique_ptr 管理链表:拥有关系、插入、删除、遍历以及整条链的清理。
  3. 共享所有权与循环引用:shared_ptr 为什么不能自动解决所有图结构,weak_ptr 的用途。

运行全部示例:

cd /home/martins3/data/vn/docs/cpp/smart-pointer
make run
示例 重点观察
ownership.cpp 的 work() 所有权移动后地址不变;抛异常后仍先析构,再进入 catch
unique-list.cpp 的 List 节点删除、所有权交接和链表析构
shared-weak.cpp 的 main() 强引用成环会留住对象,弱引用回指不留住对象

正常来说,是不需要 new 和 delete 的

使用 zero rule 就可以了

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。