本文是基于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或...
C++11标准虽然将 weak_ptr 定位为智能指针的一种,但该类型指针通常不单独使用(没有实际用处),只能和 shared_ptr 类型指针搭配使用。甚至于,我们可以将 weak_ptr 类型指针视为 shared_ptr 指针的一种辅助工具,借助 weak_ptr 类型指针, 我们可以获取 shared_ptr 指针的一些状态信息,比如有多少指向相同的 shared_pt...
weak_ptr就是一个不会导致引用计数增加的智能指针,使用weak_ptr可以解决循环依赖。初始化weak_ptr初始化为nullptr,或需要shared_ptr或另一个weak_ptr进行初始化。#include <iostream> #include <memory> using namespace std; class Person{ public: Person(){ cout << "Constructor: person's age = " << m...
C++的智能指针是一种特殊的指针类型,它能够自动管理内存资源,避免常见的内存泄漏和多次释放等问题。C++11引入了三种主要的智能指针:unique_ptr、shared_ptr和weak_ptr。 ①unique_ptr 在C++中,unique_ptr是一个智能指针(smart pointer)类模板,用于管理动态分配的内存资源,它提供了自动释放内存的功能。与原始指针相比,...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
编译错误,unique_ptr 不能被复制 的实现原理 是为了配合 shared_ptr 而引入的一种智能指针,它指向由 shared_ptr 管理的对象,但不影响对象的生命周期。通过 weak_ptr,我们可以解决 shared_ptr 的循环引用问题,避免内存泄漏。 通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过...
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段. weak_ptr 设计的目的是为配合 shared_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赋值将释放对象,空的...