C++学习笔记(二十五):c++ 智能指针

news/2025/2/9 8:20:15/
  • c++中的内存的分配和释放是由程序员自己规划。智能指针不需要自己去delete一个new的对象,会自动释放对应的内存空间。
  • unique_ptr:作用域指针,超出作用域后自动释放分配的内存区域。unique是指唯一,不能复制一个unique_ptr指针,因为如果复制一个unique_ptr指针,则这两个指针指向同样的内存, 当一个指针释放该区域的内存,另一个复制的指针就会指向一块被释放的内存地址。 
  • #include <iostream>
    #include <string>
    #include <memory>class Entity
    {
    public:int x, y;Entity(){std::cout << "这是构造函数!!!" << std::endl;}~Entity(){std::cout << "这是析构函数!!!" << std::endl;}
    }; int main()
    {{//std::unique_ptr<Entity> e(new Entity());//异常安全,会对构造函数抛出的异常进行捕获std::unique_ptr<Entity> e = std::make_unique<Entity>();}std::cin.get();return 0;
    }
  • shared_ptr共享指针:shared_ptr工作方式是通过引用计数跟踪指针的引用数量,当引用计数为0时,释放内存。

  • #include <iostream>
    #include <string>
    #include <memory>class Entity
    {
    public:int x, y;Entity(){std::cout << "这是构造函数!!!" << std::endl;}~Entity(){std::cout << "这是析构函数!!!" << std::endl;}
    }; int main()
    {{std::shared_ptr<Entity> e2;{std::shared_ptr<Entity> e1 = std::make_shared<Entity>();e2 = e1;}}std::cin.get();return 0;
    }
  • weak_ptr:j结合share_ptr使用,weak_ptr不会增加引用计数。但share_ptr会增加应用计数。

  • #include <iostream>
    #include <string>
    #include <memory>class Entity
    {
    public:int x, y;Entity(){std::cout << "这是构造函数!!!" << std::endl;}~Entity(){std::cout << "这是析构函数!!!" << std::endl;}
    }; int main()
    {{std::weak_ptr<Entity> w;{std::shared_ptr<Entity> e1 = std::make_shared<Entity>();w = e1;}}std::cin.get();return 0;
    }


http://www.ppmy.cn/news/1293775.html

相关文章

【H3C】Console口密码配置

配置方法 console口密码主要配置 line con0 //进入con0用户线视图 #line aux0 //S5024X-EI使用该命令进入用户视图 authentication-mode password //认证模式为密码模式&#xff0c;其他还有无密码和…

普通BUG

IDEA包折叠 如果自动紧凑包名,则有些时候创建新包或类的时候不能达到想要的摆放层级关系,此时右上角搜索按钮搜hide middle,关掉紧凑即可,然后既可以每层一个包不折叠. 效果: 20240105println输出多个参数 int a 10;int b 20;报错println是可以输出多个参数的,但不支持直接用…

机器视觉系统选型-线阵工业相机选型

线阵相机特点&#xff1a; 1.线阵相机使用的线扫描传感器通常只有一行感光单元&#xff08;少数彩色线阵使用三行感光单元的传感器&#xff09; 2.线阵相机每次只采集一行图像&#xff1b; 3.线阵相机每次只输出一行图像&#xff1b; 4.与传统的面阵相机相比&#xff0c;面阵扫…

maven、springboot项目编译打包本地jar、第三方jar包

0. 引言 一般我们在maven项目中都是通过引入pom坐标的形式来引入第三方jar包&#xff0c;但某些场景下&#xff0c;第三方是直接提供的jar包文件&#xff0c;这就需要我们从本地引入第三方包并进行打包。所以我们今天来看下如何进行本地引入第三方包操作 1. 步骤 1、在项目下…

从零开始的神经网络框架搭建

一、抽象化的神经网络 对于一个神经网络来的运算流程来说&#xff0c;基本可以分为两部分&#xff1a;训练与预测。而训练的基本流程又包括&#xff1a;输入数据、计算并激活、计算损失、优化等步骤。正对应神经网络架构的输入层、计算层、激活层、损失计算、优化器&#xff1…

Rancher 单节点 docker 部署备份与恢复

Rancher 单节点 docker 部署备份与恢复 1. 备份集群 获取 rancher server 容器名&#xff0c;本例为 angry_aryabhata docker ps | grep rancher/rancher6a27b8634c80 rancher/rancher:v2.5.14 xxx angry_aryabhata停止容器 docker stop angry_aryabhata创建备…

Git原理与应用(三)远程操作

Git原理与应用[三]远程操作 一.远程仓库操作1.理解分布式版本控制系统2.远程仓库的创建3.远程仓库克隆到本地4.向远程仓库推送:push5.拉取远程仓库:pull 二.模拟进行多人协作开发1.准备工作2.多人协作11.多人协作开发1.Linux用户开发2.Windows用户开发 2.合并冲突3.分支合并4.小…

【STM32】STM32学习笔记-TIM输出比较(15)

00. 目录 文章目录 00. 目录01. 输出比较简介02. PWM简介03. 输出比较通道(高级)04. 输出比较通道(通用)05. 输出比较模式06. PWM基本结构07. PWM参数计算08. 舵机简介09. 舵机硬件电路10. 直流电机及驱动简介11. 直流电机硬件电路12. 附录 01. 输出比较简介 OC&#xff08;Ou…