本文是基于gcc-4.9.0的源代码进行分析,shared_ptr和weak_ptr是C++11才加入标准的,所以低版本的gcc源码是没有shared_ptr和weak_ptr的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原理和设计思想的一样的,下面给出源码下载地址http://ftp.gnu.org/gnu/gcc 3、智能指针概念 智能指针(S...
std::weak_ptr是 C++ 标准库中的一种智能指针,它设计用来解决std::shared_ptr智能指针可能造成的循环引用问题。std::weak_ptr持有对对象的非拥有(弱)引用,这意味着它不会增加对象的引用计数,而且不会影响对象的生命周期。 这里对std::weak_ptr做个笔记梳理,如下图展示当我们创建一个智能指针std::shared_ptr或...
weak_ptr:该智能指针通常用来配合shared_ptr,解决循环引用的问题。 shared_ptr 内存模型图 shared_ptr是一个模板类。 shared_ptr内部有两个指针,一个ptr指向对象,一个ptr指向控制块。控制块里面包含着引用计数(reference count,或者叫use_count)和一个弱计数(weak_count,一般在weak_ptr的配合下才起作用)。 shared...
我们知道,复制shared_ptr是会增加内部数据的引用计数,但是复制weak_ptr时,以及由shared_ptr构造weak_ptr时,是不会增加引用计数的;且weak_ptr没有重载*、->操作符,所以不能通过*、->操作符操作智能指针的内部数据,这就是weak_ptr弱的原因吧,汗。 因为weak_pt不增加引用计数,我们可以任意构造weak_ptr,任意释放wea...
C++11标准虽然将 weak_ptr 定位为智能指针的一种,但该类型指针通常不单独使用(没有实际用处),只能和 shared_ptr 类型指针搭配使用。甚至于,我们可以将 weak_ptr 类型指针视为 shared_ptr 指针的一种辅助工具,借助 weak_ptr 类型指针, 我们可以获取 shared_ptr 指针的一些状态信息,比如有多少指向相同的 shared_pt...
智能指针weak_ptr浅析 前言 weak_ptr这个指针天生一副“小弟”的模样,也是在C++11的时候引入的标准库,它的出现完全是为了弥补它老大shared_ptr天生有缺陷的问题,其实相比于上一代的智能指针auto_ptr来说,新进老大shared_ptr可以说近乎完美,但是通过引用计数实现的它,虽然解决了指针独占的问题,但也引来了引用成环的...
作为一门现代化的系统级编程语言,提供了多种智能指针类型,能够帮助程序员管理内存、实现并发等。其中最常用的智能指针包括 Box、Rc 和 Weak。本文将以此为主线展开,介绍它们的特点、使用场景及优劣势。 堆上分配内存 指针的创建和使用 是Rust 提供的最简单的智能指针,它允许将数据分配在堆上而不是栈上,从而在不同...
在C++ 中,weak_ptr 是一种智能指针(smart pointer),用于解决循环引用问题。它是由 shared_ptr 派生而来,但不会增加引用计数,只是对所指向对象进行观察,并不拥有对象的所有权。 循环引用问题 循环引用问题指的是在使用shared_ptr管理对象时,存在两个或多个对象相互持有shared_ptr,形成一个循环引用的情况。这种情况...
weak_ptr的特性如下所示: 代码语言:javascript 复制 1.不具有普通指针的行为,没有重载operator*和->。2.它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。3.weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。4.weak_ptr没有共享资源,它的构造不会引起指针引用计数...
1, 智能指针unique_ptr #include<iostream>#include<memory>#include"demo/AA.cpp"intmain(){// 1)声明与初始化std::cout<<"Hello, World!"<<std::endl;std::unique_ptr<AA>p0(newAA("西施0"));// 方法一: 分配内存并初始化std::unique_ptr<AA>p1=std::make_unique<AA>("冰冰1");// 方法二...