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

std::make_shared和new初始化智能指针的区别

先看代码:

class Base
{public:Base(int num):a(num) {std::cout << "Base() construct" << std::endl;}~Base() {std::cout << "Base() deconstruct" << std::endl;}int Get() {return a;}private:int a;
};void testc()
{std::cout << "******************************" << std::endl;std::cout << "******************************" << std::endl;Base *p;{std::weak_ptr<Base> gw;{auto sp = std::make_shared<Base>(42);gw = sp;p = sp.get();}std::cout << "shared_ptr release, p->a = " << p->Get() << std::endl;}std::cout << "weak_ptr release, p->a = " << p->Get() << std::endl;
}void testd()
{std::cout << "==================================" << std::endl;Base *p;{std::weak_ptr<Base> gw;{std::shared_ptr<Base> sp(new Base(42));gw = sp;p = sp.get();}std::cout << "shared_ptr release, p->a = " << p->Get() << std::endl;}std::cout << "weak_ptr release, p->a = " << p->Get() << std::endl;
}

执行结果如下:

在testc()中,只有weak_ptr生命周期也结束后,Base对象内存才真正被回收,虽然Base在shared_ptr生命周期结束后就执行了析构函数,但对象所占用的内存还未被马上回收。

而在testd()中,由于使用了new分配对象内存,Base对象内存和智能指针控制块内存不在一起,所以当shared_ptr生命周期结束后就释放了Base对象所占内存。

结论:

1、make_shared只分配一次内存,智能指针控制块和管理的对象存在同一块内存里。new初始化智能指针需要调用两次内存分配,一次给控制块分配内存,一次给对象分配内存。

2、异常安全性。当在函数的实参里初始化智能指针,使用new初始化有发生异常安全性的风险,如 function_a(std::shared_ptr ptr1(new int(100)), function_b()); 编译器可能产生代码: 1先new对象,2再执行函数function_b,3最后将new对象的指针赋给智能指针,如果第2步 function_b发生异常退出,将导致内存泄漏。

3、对象内存被延迟回收:当使用了弱指针weak_ptr引用shared_ptr时,使用make_shared初始化因为控制块和对象都在同一块内存里,虽然管理的对象已经执行析构函数,但由于weak_ptr没有释放,导致内存生命周期被意外延长,只有weak_ptr生命周期结束后,整块内存才一起被回收

相关文章:

std::make_shared和new初始化智能指针的区别

先看代码&#xff1a; class Base {public:Base(int num):a(num) {std::cout << "Base() construct" << std::endl;}~Base() {std::cout << "Base() deconstruct" << std::endl;}int Get() {return a;}private:int a; };void tes…...

无涯教程-JavaScript - ERFC.PRECISE函数

描述 ERFC.PRECISE函数返回x和无穷大之间集成的互补ERF函数。 互补误差函数等于1-ERF(即1-误差函数),由等式给出- $$Erfc(x) \frac {2} {\sqrt {\pi}} \int_ {x} ^ {\infty} e ^ {-t ^ 2} dt $$ 语法 ERFC.PRECISE(x)争论 Argument描述Required/OptionalxThe lower bound…...

2023国赛数学建模C题思路分析 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…...

手写Spring:第1章-开篇介绍,手写Spring

文章目录 一、手写Spring二、Spring 生命周期 一、手写Spring &#x1f4a1; 目标&#xff1a;我们该对 Spring 学到什么程度&#xff1f;又该怎么学习呢&#xff1f; 手写简化版 Spring 框架&#xff0c;了解 Spring 核心原理&#xff0c;为后续再深入学习 Spring 打下基础。在…...

C语言中,字节对齐是一种重要的内存管理概念

C语言中&#xff0c;字节对齐是一种重要的内存管理概念 字节对齐的目的是为了提高内存访问的效率。因为CPU访问内存的最小单位是字节&#xff0c;所以如果数据结构的成员以正确的字节边界对齐&#xff0c;那么CPU就可以直接访问这些成员&#xff0c;而不需要进行额外的内存移动…...

网络丢包问题,敢不敢这样定位?

下午好&#xff0c;我的网工朋友。 所谓丢包&#xff0c;是指在网络数据的收发过程中&#xff0c;由于种种原因&#xff0c;数据包还没传输到应用程序中&#xff0c;就被丢弃了。 这些被丢弃包的数量&#xff0c;除以总的传输包数&#xff0c;也就是我们常说的丢包率。 丢包…...

【漏洞复现】H3C路由器信息泄露任意用户登录

漏洞描述 通过访问特地址得到密码可进行登录。 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利用文章中…...

随机数算法,SQL

SELECT* FROMprizes_config WHEREweight > ( SELECT FLOOR( RAND() * MAX( weight )) FROM prizes_config ) order by weight asc-- LIMIT 1;记录 id 权重 1 5 2 10 3 50 4 100 找权重最大的那个值&#xff0c;调用rand()函数&#…...

什么是软件测试+软件测试的分类【软件测试】

软件测试 什么是软件&#xff1f; 软件 程序 数据 文档 软件测试的对象有哪些&#xff1f;程序 数据 文档 C/S与B/S架构 C/S&#xff1a;客户端服务器&#xff0c;这种就是我们一定要安装一个客户端才能够用的软件&#xff0c;就叫C/S。比如&#xff1a;微信、qq B/S&am…...

2023国赛C题解题思路:蔬菜类商品的自动定价与补货决策

本次将全程提供国赛C题完整解题思路及代码&#xff0c;同时共享一些国赛论文模板等资料&#xff0c;需要的小伙伴可以关注一下&#xff0c;持续更新&#xff01;大家也可以关注B站视频&#xff1a;不知名数学家小P 实时更新 本次C题是一道较为简单的统计分析题目&#xff0c;建…...

MIT6.824 Spring2021 Lab 1: MapReduce

文章目录 0x00 准备0x01 MapReduce简介0x02 RPC0x03 调试0x04 代码coordinator.gorpc.goworker.go 0x00 准备 阅读MapReduce论文配置GO环境 因为之前没用过GO,所以 先在网上学了一下语法A Tour of Go 感觉Go的接口和方法的语法和C挺不一样, 并发编程也挺有意思 0x01 MapRed…...

JavaScript 日期 – 如何使用 DayJS 库在 JS 中处理日期和时间

当涉及到在 JavaScript 中处理日期和时间时,开发人员经常发现自己正在努力应对内置对象的复杂性Date。 虽然普通 JavaScript 提供了基本功能,但使用起来可能相当麻烦,尤其是在处理解析、格式化和操作日期时。 这就是像 DayJS 这样的外部库发挥作用的地方,它提供了大量的优…...

Docker基础入门:Docker基础总结篇--超详细

Docker基础入门&#xff1a;Docker基础总结篇[docker3要素、docker安装配置、容器使用、镜像管理发布] 一、Docker 3要素1.1、镜像&#xff08;Image&#xff09;1.2、容器&#xff08;Container&#xff09;1.3、仓库&#xff08;Registry&#xff09;1.4 、总结 二、Docker安…...

对象临时中间状态的条件竞争覆盖

Portswigger练兵场之条件竞争 &#x1f984;条件竞争之对象临时中间状态的条件竞争 Lab: Partial construction race conditions&#x1f680;实验前置必要知识点 某些框架尝试通过使用某种形式的请求锁定来防止意外的数据损坏。例如&#xff0c;PHP 的本机会话处理程序模块…...

Nodejs 第十四章(process)

process 是Nodejs操作当前进程和控制当前进程的API&#xff0c;并且是挂载到globalThis下面的全局API API 介绍 1. process.arch 返回操作系统 CPU 架构 跟我们之前讲的os.arch 一样 arm、arm64、ia32、mips、mipsel、ppc、ppc64、s390、s390x、以及 x64 2. process.cwd() …...

数据分析因子评分学习

当多个因素影响一个结果时&#xff0c;我们需要综合考虑这些因素分别对结果德影响。因子评分就是用于比较其对结果德影响程度。 文章目录 前言一、案例背景二、解决方案&#xff08;一&#xff09;分析思路&#xff08;二&#xff09;剔除无关数据&#xff08;三&#xff09;求…...

【postgresql 基础入门】数据库服务的管理

数据库服务管理 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff…...

githubPage部署Vue项目

github中新建项目 my-web &#xff08;编写vue项目代码&#xff09; myWebOnline(存放Vue打包后的dist包里面的文件) 发布流程 &#xff08;假设my-web项目已经编写完成&#xff09;Vue-cli my-web vue.config.js文件中 const { defineConfig } require(vue/cli-service)…...

【网络编程】网络原来这么简单(更新中)

故事背景&#xff1a;有一天小胖和他的朋友细狗出去吃饭&#xff0c;聊着聊着就聊到了网络&#xff0c;小胖是学校里的编程大佬&#xff0c;而细狗只是个空有求知欲的编程小白。 细狗&#xff1a;胖儿啊&#xff0c;你说计算机是怎么通信的我感觉好抽象啊。为啥别人给我发个消息…...

监控系统典型架构

监控系统典型架构如下&#xff1a; 从左往右看&#xff1a; 采集器是负责采集监控数据的&#xff0c;采集到数据之后传输给服务端&#xff0c;通常是直接写入时序库。 对时序库的数据进行分析和可视化。 告警引擎产生告警事件之后交给告警发送模块做不同媒介的通知。 可视化比…...

jsp 新能源汽车论坛网Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 新能源汽车论坛网是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…...

Code Snippet的使用

文章目录 前言Code Snippet:就是咱们在VS中敲的prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;然后按tab键自动生成代码1.VS自带的&#xff1a;prop、propfull、ctol【构造器快捷键】、for等快捷键&#xff0c;直接使用2.自定义Snippet&#xff1a; 巨人的肩膀…...

华为云云服务器评测|华为云耀云L搭建zerotier服务测试

0. 环境 - Win10 - 云耀云L服务器 1. 安装docker 检查yum源&#xff0c;本EulerOS的源在这里&#xff1a; cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 docker run hello-world 2. 运行docker镜像 默认配…...

企业电脑文件加密系统 / 防泄密软件——「天锐绿盾」

「天锐绿盾」是一种公司文件加密系统&#xff0c;旨在保护公司内网数据安全&#xff0c;防止信息泄露。该系统由硬件和软件组成&#xff0c;其中包括服务端程序、控制台程序和终端程序。 PC访问地址&#xff1a; isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c…...

单条视频涨粉50w,逃出大英博物馆背后的逻辑是什么?

为洞察小红书平台的内容创作趋势及品牌营销策略&#xff0c;新红推出8月月度榜单&#xff0c;从创作者、品牌、品类多方面入手&#xff0c;解析月榜数据&#xff0c;为从业者提供参考。 一条视频涨粉50w 情感共鸣是爆火的核心 据8月的『涨粉排行榜』TOP500数据显示&#xff0c…...

AIGC(生成式AI)试用 1 -- 基本文本查询

以一个字起&#xff0c;依次加一个字构成新句&#xff0c;不断加字使句子越来越长&#xff0c;也许越来越有趣。 1. 使用不同的生成AI提问&#xff0c;提取结果&#xff08;全部 或 第一句&#xff09;&#xff0c;对比结果&#xff0c;个人评价更喜欢哪个&#xff08;绿色底色…...

php如何处理高并发请求

PHP 处理高并发请求的方法&#xff1a; 使用异步框架&#xff1a;通过使用异步处理方式&#xff0c;可以有效地降低 PHP 处理请求的响应时间&#xff0c;避免因为 IO 操作而导致的等待阻塞。常用的异步框架有ReactPHP和Swoole等。 使用缓存&#xff1a;使用缓存可以减少每个请求…...

控制台实现汽车租赁系统

汽车租赁系统需求&#xff1a;&#xff08;基于控制台实现&#xff0c;适合基础小白练习使用&#xff09; 1、包含汽车租赁和汽车管理两个模块 2、汽车租赁需要包含汽车租赁天数以及汽车租金结算功能 3、汽车管理需要包含租赁汽车的添加、删除、修改、查询功能 代码如下&#…...

机器学习和数据挖掘03-模型性能评估指标

Accuracy&#xff08;准确率&#xff09; 概念&#xff1a;模型正确预测的样本数量与总样本数量的比例。 公式&#xff1a;Accuracy (TP TN) / (TP TN FP FN) TP (True Positives)&#xff1a;正确预测为正例的样本数。即模型正确地将正例判定为正例。 TN (True Negati…...

PageNumberPagination、LimitOffsetPagination、CursorPagination

数据 from django.db import modelsclass User(models.Model):username models.CharField(max_length64, verbose_name用户名)password models.CharField(max_length64, verbose_name密码)# 用户类型user_type models.IntegerField(choices((1, 菜鸟用户), (2, 普通用户), …...

wordpress登陆重定向/常州谷歌优化

excel文件中的工作表默认的工作表名是Sheet 1&#xff0c;想要修改工作表的名字只要双击工作表名就会出现光标&#xff0c;删除点默认名称&#xff0c;输入想要修改的名字就可以了。如果想要对工作表还有其他操作&#xff0c;可以右键点击工作表名称&#xff0c;会有选项框弹出…...

长春火车站最新通知/手机百度网盘登录入口

-------装箱和拆箱--------- 数据类型按照存储 方式 可以分为值类型和引用类型&#xff0c;两者仍然可以相互转换&#xff0c;将值类型转换为引用类型的过程称为装箱。反之则为拆箱。 static void Main(string[] args){int i123;object oi ; //装箱int i (int)0 ;/、拆箱}--…...

网站做的像会侵权吗/成人短期就业培训班

张小龙在年初微信公开课上曾谈到表情&#xff1a;人们的表情反映出情绪越来越强烈了&#xff0c;像「裂开」这个表情就非常受欢迎。我的想法可能比裂开更暴力。有一天我跟开发同学说&#xff0c;帮我做一个功能&#xff0c;我扔出一个炸弹&#xff0c;对方的屏幕就裂开来。当然…...

怎么做加盟网站/国外媒体报道

原文转自https://blog.csdn.net/weixin_40427089/article/details/86624475欢迎关注我的CSDN博客~第二章并行计算&#xff0c;本质上来说&#xff0c;就是为了提升工作效率。使得一些工作可以更快地完成。那么如何衡量完成工作的快慢&#xff0c;自然是核函数花费时间的多少。这…...

网站制作首选 新鸿儒/上热门最火标题

前言&#xff1a;分类是机器学习中的重要的一种功能&#xff0c;在机器学习的研究历史中&#xff0c;诞生了大量的分类算法&#xff0c;而每种算法都有其优势和不足。 本文汇总了常用的分类算法及其实现方式&#xff0c;方便快速查询使用。&#xff08;本文使用鸢尾花数据集&am…...

厦门橄榄网站建设/重庆seo1

名称&#xff1a;Multisim13.0 语言&#xff1a;简体中文 安装环境&#xff1a;Win7/Win8/Win1032/64位下载链接&#xff1a;https://pan.baidu.com/s/1jMmyn_0rPFWPcQ1S31BfSg提取码&#xff1a;v55j后台回复【Multisim13.0】获取Multisim是以Windows为基础的仿真工具&#…...