c++智能指针

2023-11-11

智能指针:智能指针也是模版,在头文件<memory>中

shared_ptr:允许多个指针指向同一个对象。shared_ptr<string> p; 可以指向string类型的智能指针。会自动销毁所管理的对象,还会自动释放相关联的内存。

unique_ptr:独占所指向的对象。

weak_ptr:是一种弱引用,指向shared_ptr所管理的对象。*/

 

shared_ptr<int> sp;

unique_ptr<int> up;

 

智能指针的操作

p.get:返回p中保存的指针,若智能指针释放了其对象,返回的指针所指向的对象也消失

p.awap(q):交换p和q中的指针

p.unique:若p.use_count为1,则返回true,否则返回false。shared_ptr独有操作

p.use_count:返回与p共像对象的智能指针数量。shared_ptr独有操作

 

make_shared:在动态内存中分配一个对象并初始化它,返回值指向此对象的shared_ptr*/

 

shared_ptr<int> sp1 = make_shared<int>(77);

auto sp2 = make_shared<vector<string>>();

 

shared_ptr自动销毁所管理的对象,当指向一个对象的最后一个shared_ptr被销毁时,shared_ptr会自动销毁此对象。

是通过析构函数实现的,当引用计数为0时销毁,还会自动释放相关联的内存。

 

直接管理内存

使用new动态分配和初始化对象int* p = new int;//可以初始化也可以不初始化

动态分配的const对象,const int* p = new const int(1024);

内存耗尽,返回空指针

动态释放内存,delete p;

指针和delete,不是释放非new创建的内存,不能将相同指针值多次释放

动态对象的生存期直到被释放时为止

delete之后重置指针值,提供有限的保护。delete p; p = nullptr;

 

 

shared_ptr和new的结合

不要混合使用普通指针和智能指针

不要使用get初始化另一个智能指针或为智能指针赋值*/

 

 

unique_ptr操作

u.release:u放弃对指针的控制全,赶回指针,并将u置空

u.reset:释放u指向的对象

u.reset(q):如果提供了内置指针q,令u指向这个对象,否则置为空

 

unique_ptr不支持普通的拷贝或赋值操作

当定义一个unique_ptr时,需要将其绑定到一个new返回的指针上

 

unique_ptr<string> unp1(new string("asfg"));

unique_ptr<string> unp2(p1);//错误 unique_ptr不支持拷贝

unique_ptr<string> unp3;

unp3 = unp1;// 错误 unique_ptr不支持赋值

 

weak_ptr操作

weak_ptr是一种部控制所指向对象生存期的智能指针

w.reset():将w置为空

w.use_count:与w共享对象的shared_ptr的数量

w.expired:若use_count为0返回true,否则返回false

w.lock:如果expired为true,返回一个空shared_ptr,否则返回一个指向w的对象的shared_ptr

 

weak_ptr是一种不控制所指向对象的生存期的智能指针,它指向一个shared_ptr管理的对象。

将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数,

就是最后的shared_ptr被销毁,即使有weak_ptr指向该对象,也会被销毁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++智能指针 的相关文章

  • 双缓冲列表框

    我有一个 CheckedListBox WinForms 控件 它继承自 ListBox 谷歌搜索显示问题出在 ListBox 该控件锚定到其窗体的所有四个边 当调整表单大小时 列表框会出现难看的闪烁 我尝试继承 CheckedListBo
  • 实体框架 - sql server 表中未设置默认值

    SQL Server 2005 数据库表有一列 createdon 其默认值设置为 getdate 我正在尝试使用实体框架添加记录 createdon 列未更新 我是否错过了实体框架中的任何属性 请提出建议 这是实体框架存在的少数问题之一
  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • 查找周边上的点来表示边界/形状

    我有一个简单的二维网格 其格式为myGrid x y 我正在尝试找到一种方法来找到所选网格周围的周长 这样我就有了所选网格的形状 这是我的意思的一个例子 这里的想法是找到所有相关的 角点 也就是图像周边的红点 放入一个列表中 这样我就可以从
  • C# 从整数反序列化枚举

    是否可以从 C 中的 int 反序列化枚举 例如如果我有以下课程 class Employee public string Name get set public int EmployeeTypeID get set 我可以轻松地从 XML
  • 带有 Prism 区域适配器的 AvalonDock

    我看到了一些关于 SO 的问题 但似乎没有一个适合我 我希望能够使用伟大的使用 Prism 4 但是 所有示例区域适配器均适用于 Avalondock 1 x 系列 我无法使其工作 有人有关于如何为 AvalonDock 的 LayoutD
  • 在 C++ 中从另一个数组初始化结构内的数组[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions struc
  • boost变体简单调用常用方法

    我有两个指针 只能设置其中之一 所以我正在考虑使用 boost variant 例如 boost variant
  • 将私有部分保留在 C++ 标头之外:纯虚拟基类与 pimpl

    我最近从 Java 和 Ruby 切换回 C 令我惊讶的是 当我更改私有方法的方法签名时 我必须重新编译使用公共接口的文件 因为私有部分也位于 h 文件中 我很快想出了一个解决方案 我想这对于 Java 程序员来说是典型的 接口 纯虚拟基类
  • 变形:Opencv 使用 Visual Studio 将图像显示到曲面屏幕

    我正在尝试使用 opencv API 来扭曲图像 以便将其显示到曲面屏幕上 我已经浏览了opencv中提供的翘曲apihere http docs opencv org 2 4 modules stitching doc warpers h
  • 等效

    这是否保证始终为真 std numeric limits
  • 在 4.x 内核上的 64 位内存中查找系统调用表

    我正在尝试编写一个简单的内核模块来查找 Linux 中的 sys call table 但遇到了一些麻烦 我在这里找到了 32 位 Linux 的基本指南 https memset wordpress com 2011 03 18 sysc
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • 如何在 OpenCV 中删除 mouseCallback

    在使用 C 的 OpenCV 中 有没有办法删除 mouseHandler int event int x int y int flags void param 通过函数添加到窗口 image window cv setMouseCallb
  • 为什么 istream/ostream 慢

    于 50 40http channel9 msdn com Events GoingNative 2013 Writing Quick Code in Cpp Quickly http channel9 msdn com Events Go
  • 隐式类型转换 - 编译器错误

    这个问题与this https stackoverflow com questions 3529449 can i make the ternary operator treat my class like a bool问题 下面的代码在V
  • 绑定未正确更新用户控件属性 MVVM

    编辑 删除旧代码 我将它放在 MainWindow xaml 上
  • 将整个单词与特殊字符匹配的正则表达式不起作用? [复制]

    这个问题在这里已经有答案了 我正在经历这个问题C Regex Match 整个单词 https stackoverflow com q 1209049 443568 它说要匹配整个单词使用 b模式 b 这对于匹配没有任何特殊字符的整个单词效
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • Qt for Android——关于版本的选择(ABI和CPU版本)

    1 前景介绍 之前在开发Qt for Android程序的时候 不知道如何选择套件的版本 乱选一通 经常是程序开发完 到了运行选择设备的时候告诉我设备不匹配 不支持这个ABI 下面就来讲讲这些版本 2 Qt中套件对应的版本 在我们安装Qt的
  • JTest

    接到parasoft公司一位先生打来的电话 说下个月第二周到上海来 希望顺便给我们组培训一下JTest和C Test的使用 我是用java的 自然对JTest更感兴趣一些 上网一搜 原来JTest这么出名 自己的确孤陋寡闻了 看了一下价格
  • 如何下载微信支付证书(API证书)

    一 登录微信商户平台 1 商户平台登陆网址 微信支付 中国领先的第三方支付平台 微信支付提供安全快捷的支付方式http pay weixin qq com 2 登录方式 扫码登录登录 二 进入微信商户平台下载证书 1 点击账户中心 账户设置
  • Vue简易登陆页面

    目录 1 效果展示 2 Vue代码 3 存点图片 1 效果展示 2 Vue代码
  • selenium练习实例

    1 项目流程 2 中心调度 中心调度 defmain try total search total int re compile d search total group 1 fori inrange 2 total 1 next page
  • 一分钟解决Chrome浏览器主页被hao123、360和2345篡改简单有效方法

    当你打开浏览器看到各种首页跳转的页面 对于强迫症的我是不能接受的 各种情况都碰到了 现在给出解决方法 按照下面的方式去排查就可以一定能解决你的问题 如果不行的话你来打我呀 如果问题解决了希望你能推荐给其他人 提示 检查下杀毒软件有没有绑定浏
  • Raft一致性算法分析与总结

    Raft简介 Raft是一个用于日志复制 同步的一致性算法 它提供了和Paxos一样的功能和性能 但是它的算法结构与Paxos不同 这使得Raft相比Paxos更好理解 并且更容易构建实际的系统 为了强调可理解性 Raft将一致性算法分解为
  • 跨平台传输结构体的注意事项

    1 什么是跨平台 1 这里的平台是按照CPU的位数来划分 分为32位CPU和64位CPU 不同位数CPU的差异会影响到结构体的解析 2 在实际嵌入式开发中 存在 主芯片 从芯片 的多CPU的产品 或者数据需要在不同位数CPU的机器上传输 3
  • 矩阵乘法——基于GPU的并行编程模型CUDA程序设计

    矩阵乘法 基于GPU的并行编程模型CUDA程序设计 目录 矩阵乘法 基于GPU的并行编程模型CUDA程序设计 1 题目描述 2 设计思路 实验环境 3 源码 3 1 串行程序 3 2 并行程序 3 3 性能对比与分析 1 题目描述 题目1
  • 二分图笔记

    什么是二分图 二分图一般针对无向图问题 一张图中 如果能够把全部的点分到两个集合中 保证两个集合内部没有任何边 图中的边只存在于两个集合之间 即为二分图 判断二分图 1 染色法 即用两种颜色对于这张图进行染色 相邻的结点颜色不同 如果没有矛
  • 结构重参数化之二:RepVGG

    论文 RepVGG Making VGG style ConvNets Great Again 代码 GitHub DingXiaoH RepVGG RepVGG Making VGG style ConvNets Great Again
  • Vue中实现图片下载到本地功能和导出(下载)excel文件功能:

    一 实现图片下载到本地功能 需求 将勾选的列表项的id传给后台 让后台处理并下载对应的图片 1 后台接口 下载图片zip GET download 请求数据类型 application x www form urlencoded 响应数据类
  • 神武3手游微信月礼包服务器,千万红包雨豪礼送不停 《神武3》端手游今日同步上线...

    神武3 双端今日 11月24日 同步上线 公测盛典活动全面开启 新服齐开 还有海量礼包 千万红包雨以及神兽 iPAD等各种大礼等你来拿 神武3 今日公测 公测新服齐开 千万红包雨来袭 神武3 端游 手游今日同步上线之际 新服齐开 其中 端游
  • 【HDLBits 刷题 6】Circuits(2)Sequential Logic---Latches and Filp Flops

    目录 写在前面 Latches and Filp Flops Dff Dff8 Dff8r Dff8p Dff8ar Dff16e D Latch DFF1 DFF2 DFF gate Mux and DFF1 Mux and DFF2 D
  • fedora图形界面与命令行模式切换方法

    fedora 进入命令行 终端 startx 在图形界面的控制台上输入 init 3 即可停止 xwindow 如果无法返回到终端 可以按住 alt ctrl f2 f6启动到新的控制台 然后结束掉tty1上的xwindow 结束xwind
  • 二维数组 A[m][n] 按行优先和按列优先的 下标地址转换公式

    设二维数组 A m n 按行优先存储 每个元素占 p 个字节 则 Loc i j 的地址为 i n j p 第 i 行前面有 i 行 每行有 n 个元素 加上 第 i 行的的 j 个元素 所以地址 为 i n j p 1 若 j 从下标 1
  • 【Windows系统5分钟搭建Linux环境】

    安装 Linux 虚拟机 第1步 下载 VirtualBox 第2步 下载 Vagrant 第3步 拉取Linux虚拟机镜像 第4步 网络配置 网络地址转换 端口转发 注意 电脑需要开启 CPU 虚拟化 电脑开机时 进入BIOS界面设置 第
  • SpringSecurity学习笔记(十一)CSRF攻击以及CORS跨域

    参考视频 什么是CSRF CSRF 跨站请求伪造 也可称为一站式攻击 也可写作XSRF 按照字面意思来理解 跨站请求伪造 意思就是说用户登录了A网站之后 会话没有过期 然后登录了B网站 这个时候B网站中的请求访问了A网站 这个时候A网站就会
  • STM32 基础系列教程 44 - FSMC_LCD

    前言 TFT LCD 即薄膜晶体管液晶显示器 其英文全称为 Thin Film Transistor Liquid Crystal Display TFT LCD 与无源 TN LCD STN LCD 的简单矩阵不同 它在液晶显示屏的每一个
  • c++智能指针

    智能指针 智能指针也是模版 在头文件