1. shared_ptr的实现 2. weak_ptr的实现 3. enable_shared_from_this的实现 这个版本的智能指针是我去看了本机上GNU C++标准库中shared_ptr源码后写的,在我的ubuntu22.04上,源码位置在/usr/include/c++/12/bits/shared_ptr_base.h和/usr/include/c++/12/bits/shared_ptr.h下。GNU源码的可读性并不那么好...
观察weak_ptr 对象 [20230417.5] 用 test5_weakptr() 函数作为测试代码. [20230417.5a] 创建 weak_ptr 前, 观察控制块内部的引用计数值. [20230417.5b] 附着上 weak_ptr, 看控制块的变化. [20230417.5c] 用 weak_ptr.lock() 来获取 weak_ptr 指向的内容. [20230417.5d] 当用户资源先于 weak_ptr 被销毁...
多个shared_ptr可以共享同一个对象的所有权,因此可以安全地在多个线程之间共享对象。 2.unique_ptr:unique_ptr拥有对象的所有权,并且不允许共享所有权。当unique_ptr超出范围时,对象将被自动删除。unique_ptr适用于单个所有者的情况,例如在单线程环境中。 3.weak_ptr:weak_ptr是一种引用计数智能指针,它不会增加对象...
有两个类成员:_M_ptr(由智能指针接管的普通指针)、_M_refcount(弱引用计数器,类型为__weak_count) 从构造函数看,_M_ptr获得了接管的普通指针的值,而_M_refcount的构造并不需要这个值了(这点和__shared_ptr不一样了),_M_refcount只能借助其他__shared_ptr的_M_refcount或者__weak_ptr的_M_refcount来...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
std::weak_ptr是一种智能指针,它对被std::shared_ptr管理的对象存在非拥有性(“弱”)引用。在访问所引用的对象前必须先转换为std::shared_ptr。 std::weak_ptr用来表达临时所有权的概念: 当某个对象只有存在时才需要被访问,而且随时可能被他人删除时,可以使用std::weak_ptr来跟踪该对象。
使用 weak_ptr 访问对象时需要先将其转换为 shared_ptr,如果对象已被销毁,则转换为 shared_ptr 会...
"<<std::endl;std::unique_ptr<AA>p0(newAA("西施0"));// 方法一: 分配内存并初始化std::unique_ptr<AA>p1=std::make_unique<AA>("冰冰1");// 方法二: C++14标准。std::cout<<"智能指针调用p1->m_name: "<<p1->m_name<<std::endl;// 2)用nullptr给unique_ptr赋值将释放对象,空的...
编译错误,unique_ptr 不能被复制 的实现原理 是为了配合 shared_ptr 而引入的一种智能指针,它指向由 shared_ptr 管理的对象,但不影响对象的生命周期。通过 weak_ptr,我们可以解决 shared_ptr 的循环引用问题,避免内存泄漏。 通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过...
一、std::shared_ptr的循环引用1. 概念2. 示例分析 二、std::weak_ptr1. 简介2. weak_ptr模板类提供的成员方法3. 使用示例(1)weak_ptr指针的创建(2)完整示例(解决上面循环引用问题) 4. C++模拟实现 温馨提示 引言 欢迎阅读本系列文章的第二篇,我们将继续探讨与shared_ptr相关的主题。上一篇文章我们介绍...