【C++:智能指针】
什么是内存泄漏
内存泄漏是指因为疏忽或者错误造成程序对一部分不再使用的内存没有进行释放的情况,内存释放不是指内存在物理上的消失,而是应用程序分配某段内存时,因设计错误,失去了对该内存的控制,从而造成内存浪费
RAII
RAII是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。
在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:
- 不需要显式地释放资源。
- 采用这种方式,对象所需的资源在其生命期内始终保持有效。
智能指针的实现就是采用的这种思想
在C++98中设计了一个auto_ptr的智能指针,但该设计存在缺陷,就淘汰了。
auto_ptr
auto_ptr的拷贝本质就是转移指针的管理权


unique_ptr
不支持拷贝构造,简单粗暴的解决拷贝带来的悬空问题。

shared_ptr
在unique_ptr的基础上允许拷贝,能支持这一操作的本质上,shared_ptr内部增加了一个引用计数的思路解决了拷贝问题。

简单实现shared_ptr指针代码:

不可以自己拷贝自己,为啥?
自己拷贝自己,shared_ptr会先释放掉自己的资源
sp3不再指向之前的资源,释放掉之前的资源后,资源被释放,导致资源丢失,从而指针的内容变为随机值
weak_ptr
- 不支持RAII
- 不单独管理资源
- 辅助解决shared_ptr的循环引用的问题
- 本质:赋值或者拷贝是不增加shared_ptr的引用计数
相关文章:
【C++:智能指针】
什么是内存泄漏 内存泄漏是指因为疏忽或者错误造成程序对一部分不再使用的内存没有进行释放的情况,内存释放不是指内存在物理上的消失,而是应用程序分配某段内存时,因设计错误,失去了对该内存的控制,从而造成内存浪费 …...
onlyoffice docker启用jwt并生成jwt
一、说明 本文是docker教程,linux/win的安装版本也类似,只需要修改配置文件中的secrt就可以了【Configuring JWT for ONLYOFFICE Docs - ONLYOFFICE】 二、正文开始 docker启动时候如果不想使用jwt,加上参数-e JWT_ENABLEDfalse就可以了&…...
希尔贝壳受邀参加首届“数据标注产业大会暨供需对接会”
为推动数据标注产业高质量发展,促进数据标注基地快速形成面向产业的规模化服务能力。10月22日,由国家数据局数字科技和基础设施建设司指导的首届“数据标注产业大会暨供需对接会”在北京召开,希尔贝壳受邀参加。 大会旨在进一步推动数据标注…...
35.第二阶段x86游戏实战2-C++遍历技能
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要…...
Jenkins发布vue项目,版本不一致导致build错误
问题一 yarn.lock文件的存在导致在自动化的时候,频频失败问题二 仓库下载的资源与项目资源版本不一致 本地跑好久的一个项目,现在需要部署在Jenkins上面进行自动化打包部署;想着部署后今后可以省下好多时间,遂兴高采烈地去部署&am…...
vue3使用webSocket
1.安装插件 npm i vueuse/core10.11.12.引入使用 import { useWebSocket } from "vueuse/core"const { send, open, close: wsClose, status } useWebSocket(ws://192.168.100.90:53021/inms-application/alarm, {onMessage: (ws, { data }) > {console.log(&q…...
957种卫星参数文档的分享下载
自1957年10月4日苏联发射第一颗人造卫星Sputnik-1至今已经有67年,如今卫星已经在气象、遥感和通讯等领域为我们提供服务。 现在为你分享957种卫星参数,需要Excel文档请在文未查看领取下载方式。 卫星介绍 卫星是由人类制造并发射到太空,围…...
负载均衡详解:背景、实现技术、作用范围与常用算法
负载均衡(Load Balancing)是一种通过将请求分配到多个服务器上,从而优化资源使用、提高响应速度并增强系统可靠性的一种技术手段。它是现代分布式系统和互联网应用中不可或缺的一部分。在本篇文章中,我们将深入探讨负载均衡的方方…...
CCAA:产品认证基础3(产品认证方案)
学习要点 *产品认证方案和认证制度 *产品认证方案的基本要素、功能和活动 *产品认证方案的类型 *产品认证方案的制订和实施 *质量管理体系在产品认证方案中的应用 *典型产品认证方案的应用 第一节 产品认证方案和产品认证制度 一、概念 认证制度是指实施认证的规则、程序和…...
go语言中的Scan()和Scanln()输入函数
Scan()输入函数 package mainimport "fmt"func main() {var a intvar b stringfor {fmt.Println("请输入一个整数和一个字符串(用空格分隔):")fmt.Scan(&a, &b) // 直接读取输入到变量中fmt.Println("整数…...
UML外卖系统报告(包含具体需求分析)
1 系统背景 随着互联网技术的快速发展,外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制,而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来,…...
net Core Data Protection 数据保护 加密 编码 哈希 FromServices
》》》 通过构造函数 获取服务 [Route("api/[controller]")][ApiController]public class DataProtectController : ControllerBase{[HttpGet]public string Info(){return "zen";}// [FromServices] 自动获取 builder.Services.AddDataProtection()注…...
4K手机壁纸之动漫系列
因为平台限制了图片大小,大家将就看吧,原图找me...
关于eclipse的workspace
如果项目很多,为了方便管理,最好不要是使用working set 对项目进行分组。一个workspace加载项目过多,即使进行分组,有些操作也很对所有项目生效。为了避免卡顿,建议直接使用workspace分组管理,而不是workin…...
Vue引入高德地图自定义信息窗体绑定点击事件无效解决方案
你们好,我是金金金。 场景 笔者用的Vue3,引入了高德地图,version为2.0,场景如下: 在地图上根据经纬度度打点标记了一个位置,然后点击点标记弹出自定义信息窗体,右上角关闭按钮则是绑定了关闭自定…...
私域朋友圈运营
今天必须给大家分享一份超棒的朋友圈运营思维导图 有了它,你可以逐步打造属于自己的精彩朋友圈🎉。无论是想分享生活点滴💧,还是展示个人魅力✨,又或者推广自己的业务📈,这份思维导图都能给你指…...
【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览
文件预览 Vue3一. word二. excel三. ppt四. pdf4.1 vue-pdf-embed4.2 iframe 五. 视频六:扩展——kkFileView Vue3 一. word 安装:npm install docx-preview父页面 <template><div><DocPreviewv-if"filePath.includes(docx)"…...
如何加密电脑磁盘?电脑本地磁盘加密方法介绍
随着信息技术的不断发展,电脑磁盘加密已经成为保护个人隐私和数据安全的重要手段。本文将介绍几种常见的电脑本地磁盘加密方法,帮助用户保护自己的数据安全。 文件夹只读加密专家 文件夹只读加密专家不仅可以加密电脑中的文件夹,还可以加密保…...
1688、淘宝、京东搜索商品聚合接口技术实现与代码示例
在当今电商领域,多平台商品搜索已成为用户获取多样化商品信息的重要途径。为了满足用户对1688、淘宝、京东等主流电商平台商品搜索的需求,开发一个跨平台的商品搜索聚合接口显得尤为重要。本文将详细介绍如何实现这一接口,包括接口设计、平台…...
视频智能分析平台LiteAIServer烟火识别软件引领烟火检测与识别的智能新纪元
随着人工智能技术的飞速进步,视频智能分析技术正以前所未有的深度和广度渗透至安全防护、环境监测等多个关键领域。其中,烟火识别软件LiteAIServer凭借其卓越的烟火检测与识别算法,成为了业界瞩目的焦点。 一、烟火检测:守护公共安…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

自己拷贝自己,shared_ptr会先释放掉自己的资源