C++ 智能指针简单介绍及用法
C++ 智能指针简单介绍及用法
智能指针是 C++11 引入的一个非常实用的特性,旨在自动管理动态分配的内存,避免内存泄漏和悬空指针问题。主要有三种类型的智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。下面是对它们的详细介绍:
1. std::unique_ptr
-
特性:
- 独占所有权:每个
std::unique_ptr实例只能拥有一个对象的唯一所有权。 - 不可复制:不能复制
unique_ptr,但可以移动(使用移动构造函数或移动赋值运算符)。
- 独占所有权:每个
-
使用场景:适用于表示唯一的拥有关系,不需要共享所有权的情况。
-
示例:
#include <iostream> #include <memory>void uniquePtrExample() {std::unique_ptr<int> ptr1(new int(10)); // 创建 unique_ptrstd::cout << *ptr1 << std::endl; // 使用指针std::unique_ptr<int> ptr2 = std::move(ptr1); // 转移所有权// std::cout << *ptr1; // 错误:ptr1 已经不再拥有对象 }
2. std::shared_ptr
-
特性:
- 共享所有权:多个
std::shared_ptr实例可以指向同一个对象。 - 引用计数:通过引用计数来管理对象的生命周期,当最后一个
shared_ptr被销毁时,内存会自动释放。
- 共享所有权:多个
-
使用场景:适用于多个对象共享同一资源的情况。
-
示例:
#include <iostream> #include <memory>void sharedPtrExample() {std::shared_ptr<int> ptr1(new int(20)); // 创建 shared_ptr{std::shared_ptr<int> ptr2 = ptr1; // ptr2 也指向同一个对象std::cout << *ptr2 << std::endl; // 输出 20} // ptr2 离开作用域后,引用计数减少std::cout << *ptr1 << std::endl; // 仍然有效输出 20 }
3. std::weak_ptr
-
特性:
- 弱引用:提供对
shared_ptr指向对象的非拥有性引用。 - 不增加引用计数:不会影响对象的生命周期。
- 弱引用:提供对
-
使用场景:用于防止循环引用,或者在需要检查资源是否仍然有效时。
-
示例:
#include <iostream> #include <memory>void weakPtrExample() {std::shared_ptr<int> sptr(new int(30));std::weak_ptr<int> wptr = sptr; // 创建 weak_ptrif (auto sptr2 = wptr.lock()) { // 检查 weak_ptr 是否有效std::cout << *sptr2 << std::endl; // 输出 30}sptr.reset(); // 删除 sptr 指向的对象if (auto sptr2 = wptr.lock()) {std::cout << *sptr2 << std::endl; // 输出为空,指向的对象已被释放} else {std::cout << "资源已被释放" << std::endl;} }
总结
利用智能指针可以帮助我们有效管理内存,降低内存泄漏的风险,提高程序的安全性和稳定性。🎉 选择合适的智能指针类型可以使代码更简洁和易于维护。
相关文章:
C++ 智能指针简单介绍及用法
C 智能指针简单介绍及用法 智能指针是 C11 引入的一个非常实用的特性,旨在自动管理动态分配的内存,避免内存泄漏和悬空指针问题。主要有三种类型的智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。下面是对它们的详细介绍&…...
k8s笔记之创建Istio Gateway规则
创建Istio Gateway 背景如何创建Istio Gateway规则配置方式rewrite重写路径直接去除match,默认都转发到一个服务路由规则多种配置方式实践(即开头的完整版) 涉及的命令补充注意事项 背景 为什么需要使用到Istio Gateway?充当k8s服…...
NAND行业回归盈利:AI与云存储需求驱动
市场概览 根据Yole Group于2024年6月25日发布的市场报告,经过五个季度的亏损之后,NAND闪存行业在2024年第一季度(1Q24)实现了盈利回归。这一转变主要得益于企业级固态硬盘(SSD)领域的强劲需求增长…...
【限免】频控阵雷达:概念、原理与应用【附MATLAB代码】
微信公众号:EW Frontier QQ交流群:949444104 主要内容 PDA、FDA MATLAB代码 %---------------------------------------- %功能:FDA和相控阵天线方向图 %版本:ver1.0 %时间:2017.11.1 %--------------------------------------- clear all; clc; disp…...
从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架
这一期开始开发header部分,预期实现两个目标: 创建 Flask 项目导入旅游数据后端实现旅游数据的查询 1 python 环境 & 开发环境 python 安装和pycharm安装需要去网上找包,建议python使用3.8 或者3.9版本 2 新建项目 我们新建一个文件…...
学习硬件测试04:触摸按键+PWM 驱动蜂鸣器+数码管(P62~P67、P71、P72)
一、触摸按键 1.1理论讲解 1.1.1实验现象 触摸按键 1 单击与长按,控制 LED1;触摸按键 2 单击与长按,控制 LED2;触摸按键 3 单击与长按,控制 LED3;触摸按键 4 单击与长按,控制继电器; 1.1.2硬件电路 是原理图上触摸…...
JS原型链
JS的原型链 文章目录 JS的原型链前言一、原型是什么?二、原型链总结 前言 在使用数组或对象中的方法时,你是不是会感觉很奇怪,为什么仅仅是创建了一个数组或是对象,就能够使用它提供的方法呢?JS是怎么做到的呢&#x…...
《Java初阶数据结构》----5.<二叉树的概念及使用>
前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…...
git查看记录详解
文章目录 git查看记录查看文件修改列表查看修改差异友好的查看修改记录结合多个选项查看记录示例输出 git查看记录 使用 git log 你不仅可以查看提交记录,还可以通过一些选项查看文件的修改列表、修改差异,并以更友好的方式查看修改记录。以下是一些常用…...
检索增强生成RAG系列10--RAG的实际案例
讲了很多理论,最后来一篇实践作为结尾。本次案例根据阿里云的博金大模型挑战赛的题目以及数据集做一次实践。 完整代码地址:https://github.com/forever1986/finrag.git 本次实践代码有参考:https://github.com/Tongyi-EconML/FinQwen/ 目录 …...
程序员自我提升的全面指南
程序员自我提升的全面指南 1. 技术基础巩固重要性实践方法 2. 技术栈拓展重要性实践方法 3. 软技能提升重要性实践方法 4. 实践与项目经验重要性实践方法 5. 持续学习与职业规划重要性实践方法 6. 代码质量与优化重要性实践方法 7. 思维与创新能力重要性实践方法 8. 健康与心理…...
【golang】Golang手写元组 tuple | golang tuple
Golang手写元组 tuple 1、源码 如下: package tupletype Tuple[T any, U any] struct {First TSecond U }// zip combines elements of two slices into a slice of pairs (tuples), which is useful for combining related data. func Zip[T any, U any](slice…...
golang中struct的tag -简记
今天 简单整理一下,关于golang中struct的tag type User struct {UId int gorm:"column:uid;type:bigint;unique_index;not null;comment:用户id"Name string json:"name"Age int bson:"age"From string binding:"requi…...
分布式领域扩展点设计稿
分布式领域扩展点设计稿 背景坐标设计理念设计图Quick Start相关组件 背景 随着交易业务和基础知识的沉淀,愈发觉得扩展点可以在大型交易分布式架构中可以做更多的事情。 经过一个月的思考,决定将 单点领域扩展点(savior-ext) 从…...
玩转微信公众号变现:从新手到专家的全攻略
个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] 📱…...
JVM: 方法调用
文章目录 一、介绍二、方法调用的原理1、静态绑定2、动态绑定(1)介绍(2)原理 一、介绍 在JVM中,一共有五个字节码指令可以执行方法调用: invokestatic: 调用静态方法。invokespecial:调用对象…...
测试面试宝典(四十一)—— 接口自动化的优缺点
接口自动化测试的优点: 1. 提高测试效率:能够快速执行大量的测试用例,节省了手动测试重复执行的时间和人力成本。 2. 尽早发现问题:可以在软件开发的早期阶段介入,有助于及时发现接口层面的缺陷,降低修复…...
“火炬科企对接”先进计算产业推进会 | 麒麟信安受邀参加,并签署开源生态合作协议
7月30日,“火炬科企对接”先进计算产业推进会在长沙隆重召开。大会由工业和信息化部火炬高技术产业开发中心、湖南省科学技术厅、湖南省工业和信息化厅、湖南湘江新区管理委员会、中国邮政储蓄银行联合举办。麒麟信安与来自国内先进计算领域的专家学者,2…...
中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题
HaoWa v1.3.1由挖主题开发的一款网址导航类主题。 HaoWA主题除主体导航列表外,对主题所需的小模块都进行了开放式的HTML编辑器形式的功能配置,同时预留出默认的代码结构,方便大家在现有的代码结构上进行功能调整。 同时加入了字体图标Font …...
图欧学习资源网创站以来的更新日志(截止至2022.5.6)不完全统计
一、网站创立和初步发展 2021年10月28日创建【TUO图欧视频备份站】,当时只有【单词视频】文件夹. 小学、初中、高中、大学、四六级、专四、专八、专升本、考研、考博、托福、雅思、托业、GRE、SAT、GMAT、MBA、新概念等 数量:500个文件,60个…...
告别会议记录烦恼:5分钟掌握Windows实时语音转文字神器
告别会议记录烦恼:5分钟掌握Windows实时语音转文字神器 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录焦头烂额吗?TMSpeech这款免费开源的Windows实时语音转文字工具…...
PP-DocLayoutV3开发者案例:对接LangChain文档加载器,输出标准Unstructured格式
PP-DocLayoutV3开发者案例:对接LangChain文档加载器,输出标准Unstructured格式 1. 项目背景与需求 在实际的文档处理流程中,我们经常需要将各种格式的文档(PDF、图片、扫描件等)转换为结构化的数据,以便后…...
seo兼职如何做外链建设_seo兼职如何进行社交媒体优化
SEO兼职如何做外链建设 在当今互联网时代,外链建设无疑是SEO(搜索引擎优化)中最重要的一环。对于SEO兼职者来说,如何有效地进行外链建设是一项必须掌握的技能。本文将从问题分析、原因说明、解决方法及注意事项四个方面ÿ…...
告别枯燥数据!用Unity的Chart And Graph插件5分钟搞定游戏内排行榜(柱状图实战)
5分钟用Unity打造动态游戏排行榜:Chart And Graph插件实战指南 在独立游戏开发中,排行榜系统几乎是标配功能——但大多数开发者面对枯燥的数值列表时,往往陷入两难:要么花费大量时间自研可视化组件,要么使用简陋的文本…...
5分钟搞定Asterisk SIP服务器:Ubuntu下从安装到Linphone客户端配置全流程
零基础构建企业级VoIP通信系统:Asterisk与Linphone实战指南 1. VoIP技术与企业通信系统架构解析 在数字化办公场景中,VoIP(Voice over Internet Protocol)技术正在彻底改变传统通信方式。与PSTN(公共交换电话网络&…...
OpenClaw自动化监控:Phi-3-mini-128k-instruct异常检测系统
OpenClaw自动化监控:Phi-3-mini-128k-instruct异常检测系统 1. 为什么需要个人服务器的智能看护方案 去年我的个人服务器遭遇了一次严重的磁盘空间耗尽事故。当时正在外地出差,突然收到服务不可用的报警,紧急联系朋友帮忙处理才发现是日志文…...
lil_tea c++ 2023 style guide
调试 我觉得调试是最重要的, 所以放在最开头. 调试, 最最最重要的, sudo apt remove gdb (这只是个玩笑, 不要真的执行). 深入学习贯彻 fail fast 原则, 在出现错误时直接退出程序, 而不是使用 try throw catch. 编写程序的时候假设所有东西不会出错, 然后每当出现程序异常退…...
2026最权威的十大AI辅助写作助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 现今,人工智能辅助论文写作在学术研究里已渐渐变成常见的手段,当前&a…...
GHelper合盖模式终极指南:华硕笔记本外接显示器合盖不休眠完整教程
GHelper合盖模式终极指南:华硕笔记本外接显示器合盖不休眠完整教程 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TU…...
基于MAKLINK图理论的混合蚁群算法与Dijkstra算法在二维空间路径规划中的优化实现
【蚁群算法】/改进蚁群算法/Dijkstra算法/遗传算法/人工势场法实现二维/三维空间路径规划 本程序为蚁群算法Dijkstra算法MAKLINK图理论实现的二维空间路径规划 算法实现: 1)基于MAKLINK图理论生成地图,并对可行点进行划分; 2&…...
