当前位置: 首页 > news >正文

C++中的两类智能指针std::unique_ptr与std::shared_ptr

在C++中,std::unique_ptrstd::shared_ptr是两种智能指针,用于管理动态分配的内存资源,避免内存泄漏和提高代码的安全性。它们之间有一些重要的区别,下面对它们进行简要比较:

std::unique_ptr:

  1. 独占所有权std::unique_ptr实现了独占所有权的语义,即一块内存资源只能被一个std::unique_ptr实例所拥有。
  2. 轻量级std::unique_ptr相对于std::shared_ptr更为轻量级,因为不需要维护引用计数。
  3. 移动语义:支持移动语义,可以通过std::move将所有权转移给另一个std::unique_ptr,而不是进行复制操作。
  4. 避免循环引用std::unique_ptr不能用于实现循环引用,因为它无法实现多个指针共享所有权。

std::shared_ptr:

  1. 共享所有权std::shared_ptr实现了共享所有权的语义,多个std::shared_ptr实例可以共同拥有同一块内存资源,通过引用计数来管理资源的生命周期。
  2. 引用计数std::shared_ptr维护了一个引用计数,记录有多少个std::shared_ptr实例指向同一块内存。
  3. 线程安全std::shared_ptr的引用计数是线程安全的,可以在多线程环境下使用。
  4. 循环引用std::shared_ptr可能会导致循环引用的问题,如果两个std::shared_ptr相互引用,可能会导致内存泄漏。

如何选择:

  • 如果资源需要独占所有权,并且不涉及循环引用情况,推荐使用std::unique_ptr
  • 如果多个指针需要共享同一块内存资源,并且需要处理循环引用情况,推荐使用std::shared_ptr

代码示例:

#include <memory>int main() {// std::unique_ptr 示例std::unique_ptr<int> uniquePtr(new int(10));// std::shared_ptr 示例std::shared_ptr<int> sharedPtr = std::make_shared<int>(20);return 0;
}

在示例中,uniquePtr是一个std::unique_ptr指向整型变量,而sharedPtr是一个std::shared_ptr指向整型变量。根据具体需求选择合适的智能指针类型,以确保内存资源的正确管理和避免潜在的问题。

相关文章:

C++中的两类智能指针std::unique_ptr与std::shared_ptr

在C中&#xff0c;std::unique_ptr和std::shared_ptr是两种智能指针&#xff0c;用于管理动态分配的内存资源&#xff0c;避免内存泄漏和提高代码的安全性。它们之间有一些重要的区别&#xff0c;下面对它们进行简要比较&#xff1a; std::unique_ptr: 独占所有权&#xff1a…...

java中Future使用详细介绍

一、什么是Future&#xff1f; 在并发编程中&#xff0c;可以通过Future对象来异步获取结果。 使用Thread或runnable接口都不能获取异步的执行结果&#xff0c;因为他们没有返回值。而通过实现Callable接口和Future就可以获取异步执行的结果&#xff0c;当异步执行结束后&…...

docker和containerd的区别

docker和containerd的区别 1、容器运行时 1.1 容器运行时概念 容器运行时&#xff08;Container Runtime&#xff09;是一种负责在操作系统层面创建和管理容器的软件工具或组件。它是容器化技术的核心组件之一&#xff0c;用于在容器内部运行应用程序&#xff0c;并提供隔离…...

汇编实现流水灯

1.使能时钟&#xff1a; 1使能GPIO的外设时钟ldr r0,0x50000A28ldr r1,[r0]orr r1,r1,#(0x3<<4)//使能第&#xff14;&#xff0c;&#xff15;位str r1,[r0] 2.设置为输出模式 设置GPIOE10为输出模式ldr r0,0x50006000ldr r1,[r0]bic r1,r1,#(0x3<<20)orr r1,r1…...

SQL生成序列浅析

01.sqlserver版本 使用sqlserver将数据复制n条 selectt.indx,t.name,tmp.vlue from (values(1,苹果) ) as t(indx, name) ,(select[number] as vluefrom master.dbo.spt_valueswhere [type] pand [number] between 1 and 10 ) as tmpspt_values是什么 spt_values是SQL Se…...

24年gdcpc省赛C题

1279:DFS 序 先不考虑多节点,先看着颗二叉树,假设他们的父亲节点是第k个被访问的点,如果先访问左子树,那么得到的结果是a1*ka2*(k1)b1*(2k)b2*(2k1),可以发现,先访问左子树,那么右子树每次的乘以的p值实际上是左子树乘以的p值加上左子树的节点个数,比如a1*k和b1*(2k),如果不看2…...

以梦为马,不负韶华(3)-AGI在企业服务的应用

AGI在企业服务中&#xff0c;各应⽤已覆盖企业全流程&#xff0c;包含⼈⼒、法务、财税、流程⾃动化、知识管理和软件开发各领域。 由于⼤语⾔模型对⽂本处理类场景有着天然且直接的适配性&#xff0c;⽂本总结、⽂本内容⽣成、服务指引等发展起步早且应⽤成熟度更⾼。 在数据…...

Xshell 使用

Xshell 使用 ①xshell 安装包 ②xshell 卸载 ③xshell 同时控制多窗口 ①xshell 安装包 Xshell 7 破解版 ②xshell 卸载 第一步: 打开控制面板卸载xshell 第二步: win+R,输入regedit,打开注册表,删除xshell相关注册信息 注册表目录: 在下面两个目录中查找xshell相关…...

【yijiej】mysql报错 之 报错:Duplicate entry 字段 for key ‘表名.idx_字段’

一、问题操作 Mysql 进行insert 操作&#xff0c;报错&#xff1a;Duplicate entry 字段 for key ‘表名.idx_字段’ 原因解析&#xff1a;idx 是做的索引键&#xff0c;是具有唯一性二、问题原因&#xff08;三种情况&#xff0c;当前我遇到的情况是第一种&#xff09; 1、当 …...

解决npm卡死,无法安装依赖

npm卡死&#xff0c;无法安装依赖 异常描述原因分析与解决方法 异常描述 1.无法进入命令行&#xff0c;或是很慢没反应 2.装表格无限滚动的el-table-infinite-scroll依赖一上午了&#xff0c;也不能装&#xff0c;报错提示 原因分析与解决方法 1.命令行的问题&#xff1a;缓…...

速卖通测评揭秘:如何选择安全的渠道操作

许多商家对测评存在误解&#xff0c;认为只需进行几次测评就能迅速打造爆款。实际上&#xff0c;测评是一个需要计划和持久性的过程&#xff0c;以便让平台检测到产品的受众程度并提高产品的曝光和权重。 在进行测评时&#xff0c;安全是首要考虑的问题。平台可以通过设备、网…...

ping不通ip的解决方法

解决ping不通IP的问题可以通过以下几种方法&#xff1a; 1.检查IP配置&#xff1a;确保所有设备的IP地址、子网掩码和默认网关配置正确。如果使用DHCP&#xff0c;请确认设备已设置为自动获取IP地址&#xff0c;并检查DHCP服务器的地址池配置是否正确且未耗尽。 2.检查网络设…...

Linux x86_64 UEFI 启动

文章目录 前言一、UEFI二、Disk device compatibility2.1 GPT 磁盘分区表2.1.1 简介2.1.2 Linux 2.2 ESP&#xff08;EFI&#xff09; 文件系统2.2.1 简介2.2.2 LinuxLinux Kernel EFI Boot Stub 三、UEFI GPT grub23.1 简介3.2 引导方式 3.3 BOOTX64.EFI3.4 shimx64.efi3.5 …...

妙解设计模式之适配器模式

目录 适配器模式的概念生活中的例子在编程中的例子 软件工程中的实际应用兼容旧接口整合第三方库简化复杂接口跨平台支持 总结 适配器模式的概念 适配器模式是一种结构设计模式&#xff0c;它允许将接口不兼容的类通过一个适配器类进行适配&#xff0c;使得这些类可以一起工作…...

【Linux】Linux下centos更换国内yum源

&#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f331;系列专栏&#xff1a;Linux &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 1. 备份旧的 YUM 源文件2. 下载国内的 YUM 源文件阿里云&#xff1a;网易&#xff1a; 3. 清理 YUM 缓存4. 更新…...

HTML静态网页成品作业(HTML+CSS)——动漫熊出没介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…...

算法训练营day42

dp含义确定 递推公式 初始化 遍历顺序 打印 题目1&#xff1a;62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int uniquePaths(int m, int n) {// 定义dp数组 含义是每个坐标到达的路径vector<vector<int>> dp(m, vector&l…...

【Vue】自动导入组件

1. 下载插件 npm install unplugin-vue-components 2. 修改vite.config.js import { fileURLToPath, URL } from node:urlimport { defineConfig } from vite import vue from vitejs/plugin-vue import Components from unplugin-vue-components/vite // 按需加载自定义组件/…...

mfc140u.dll丢失的解决方法有哪些?怎么全面修复mfc140u.dll文件

mfc140u.dll丢失其实相对来说不太常见到&#xff0c;因为这个文件一般是不丢失的&#xff0c;不过既然有人遇到这种问题&#xff0c;那么小编一定满足各位&#xff0c;给大家详细的唠叨一下mfc140u.dll丢失的各种解决方法&#xff0c;教大家以最快最有效率的方法去解决mfc140u.…...

MySQL8报错Public Key Retrieval is not allowedz 怎么解决?

问题描述 当我们使用数据库管理工具连接mysql8的时候&#xff0c;可能遇到报错&#xff1a; Public Key Retrieval is not allowed 解决办法 1、在连接属性中配置allowPublicKeyRetrieval设置为true 2、在连接URL中加上配置allowPublicKeyRetrieval为true...

52DH Pro网址导航系统开源版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这款导航系统是基于 SiteHub 二次开发的网址导航系统&#xff0c;拥有独立前台和拟态风格的后台管理中心。我爱导航系统 (52DH Pro 网址导航系统) 集合网上优质网站网址导航&#xff0c;…...

王力宏重仓比亚迪,行业震惊

王力宏最近以腾势汽车全球代言人的身份亮相发布会&#xff0c;现场直言&#xff1a;“后悔10年前没投资比亚迪&#xff0c;这次我要把握机会。” 当被问及是否用代言费买了比亚迪股票&#xff0c;他大方承认“这是真的”。他还补充道&#xff1a;“10年前我做过一档节目&#x…...

免费解密网易云音乐NCM格式:ncmdumpGUI完整使用指南

免费解密网易云音乐NCM格式&#xff1a;ncmdumpGUI完整使用指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否在网易云音乐下载了喜欢的歌曲&#xff…...

Taotoken API Key的权限管理与审计日志功能初探

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken API Key的权限管理与审计日志功能初探 对于将大模型能力集成到业务流程中的团队而言&#xff0c;API Key的安全管理与操作…...

2026年主流一键生成论文工具全攻略(含免费额度说明)

以下是当前学术圈口碑 TOP 的6 款 AI 写论文工具&#xff0c;覆盖从选题、开题到降重、答辩的论文全流程&#xff0c;剔除冗余工具&#xff0c;每款均附分步骤实操指南场景适配技巧&#xff0c;重点突出中文论文适配性&#xff0c;新手也能快速上手&#xff0c;效率翻倍。一、全…...

SubAgent 进阶:LLM 策略、工具借用与 Skill 嵌套

标签&#xff1a;Java SubAgent LLM策略 llmFactory allowedTools Skill嵌套 j-langchain 前置阅读&#xff1a;SubAgent 基础&#xff1a;拥有自主工具的子代理 适合人群&#xff1a;已掌握 SubAgent 基础用法&#xff0c;希望灵活控制模型选择、工具权限与多层嵌套的 Java 开…...

IP查询工具怎么选?在线API vs IP离线库:精度、速度、成本、隐私全对比

随着游戏安全、反作弊、精准营销、风控合规等业务场景的增长&#xff0c;IP查询逐渐从“简单的归属地展示”转向大规模实时决策、风险识别与行为画像构建的核心基础能力。选择在线API还是离线库&#xff0c;直接决定了你的系统在高并发下的稳定性、数据合规性以及长期运维成本。…...

终极免费InfluxDB图形化管理工具:告别命令行的高效解决方案

终极免费InfluxDB图形化管理工具&#xff1a;告别命令行的高效解决方案 【免费下载链接】InfluxDBStudio InfluxDB Studio is a UI management tool for the InfluxDB time series database. 项目地址: https://gitcode.com/gh_mirrors/in/InfluxDBStudio 你是否厌倦了在…...

如何在Windows系统中创建虚拟游戏手柄?vJoy开源项目完全指南

如何在Windows系统中创建虚拟游戏手柄&#xff1f;vJoy开源项目完全指南 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 你是否曾因缺少物理游戏手柄而无法体验某些经典游戏&#xff1f;或者需要为专业软件创建自定义控制方…...

【权威实测报告】:在137组对比测试中,仅2组prompt达成Apple Human Interface Guidelines认证级毛玻璃效果(附完整prompt审计清单)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;【权威实测报告】&#xff1a;在137组对比测试中&#xff0c;仅2组prompt达成Apple Human Interface Guidelines认证级毛玻璃效果&#xff08;附完整prompt审计清单&#xff09; 为验证当前主流AI图像生成模型…...