C++中shared_ptr与weak_ptr的实现原理及相互关系如何构成一个高效且自洽的智能指针机制?

2026-04-12 10:020阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计2020个文字,预计阅读时间需要9分钟。

C++中shared_ptr与weak_ptr的实现原理及相互关系如何构成一个高效且自洽的智能指针机制?

目录 + shared_ptr + weak_ptr + 内存模型 + RefCnt 和 Mdel 实现 + shared_ptr 实现 + weak_ptr 实现 + shared_from_this() 实现 + 循环引用 + shared_ptr 获取引用计数 + 表示一块内存被几个智能指针所共享,当引用计数为0时,会自动释放

目录
  • shared_ptr
  • weak_ptr
  • 内存模型
  • RefCnt 和 Mdel实现
  • shared_ptr 实现
  • weak_ptr 实现
  • shared_from_this()
  • 循环引用

shared_ptr

采取引用计数来表示一块内存被几个智能指针所共享,当引用计数为0时,会自动释放该内存,避免了忘记手动释放造成的内存泄露问题。采用引用计数来管理内存对象的做法是Linux内核惯用的手法。

weak_ptr

weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。同时weak_ptr 没有重载*和->,但可以使用 lock 获得一个可用的 shared_ptr 对象(引用计数会增加1)。

阅读全文

本文共计2020个文字,预计阅读时间需要9分钟。

C++中shared_ptr与weak_ptr的实现原理及相互关系如何构成一个高效且自洽的智能指针机制?

目录 + shared_ptr + weak_ptr + 内存模型 + RefCnt 和 Mdel 实现 + shared_ptr 实现 + weak_ptr 实现 + shared_from_this() 实现 + 循环引用 + shared_ptr 获取引用计数 + 表示一块内存被几个智能指针所共享,当引用计数为0时,会自动释放

目录
  • shared_ptr
  • weak_ptr
  • 内存模型
  • RefCnt 和 Mdel实现
  • shared_ptr 实现
  • weak_ptr 实现
  • shared_from_this()
  • 循环引用

shared_ptr

采取引用计数来表示一块内存被几个智能指针所共享,当引用计数为0时,会自动释放该内存,避免了忘记手动释放造成的内存泄露问题。采用引用计数来管理内存对象的做法是Linux内核惯用的手法。

weak_ptr

weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。同时weak_ptr 没有重载*和->,但可以使用 lock 获得一个可用的 shared_ptr 对象(引用计数会增加1)。

阅读全文