C++ shared_ptr和std::move

2023-10-27

以shared_ptr为参数调用std::move并用等于号时,会调用共享指针的移动构造函数,从而使原共享指针失效:

#include <iostream>
#include <memory>
using namespace std;

int main() {
	shared_ptr<int> iptr(new int);

	shared_ptr<int> iptr_new = std::move(iptr);

	if (!iptr) {
		cout << "iptr is invalid" << endl;    // 会被输出
	}
}

共享指针的移动构造函数相当于做了如下操作:

template<typename T> class shared_ptr {
public:
    shared_ptr(shared_ptr &&other) {
        ptr_ = other.ptr_;
        ref_count_ = other.ref_count_;
        other.ptr_ = nullptr;
        other.ref_count_ = nullptr;
    }
    // ...
private:
    T* ptr_;
    int* ref_count_;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ shared_ptr和std::move 的相关文章

随机推荐

  • SQLServer数据库 附加数据库时出错;有关详细信息,请单击“消息”列中的超链接的处理方式

    在SQL Server 数据库中附加数据库时出错 这是由于权限的问题 找到数据库所在文件或文件件 我的数据库文件放到了 新建文件夹 2 中了 所以 我设置下这个文件夹的权限 1 点击右键 选中属性 2 点击安全 编辑 添加 高级 立即查找
  • 将hexo项目部署到github

    个人博客预览点击这里 搭建以及优化hexo项目点击这里 一 在github新建一个仓库 二 安装插件来实现一键部署 三 在项目根目录下的 config yml配置文件末尾做如下修改 四 推送到github仓库 一 在github新建一个仓库
  • linux下jps命令找不到的问题 bash: jps: 未找到命令... --- 记录

    jps是用来查看进程的命令 常常要用jps来查看名称服务是否已启动 但是某些机器报错如下 bash jps command not found 解决办法如下 一 检查基础配置 which Java java version 如果指向的是1
  • MySQL 事务 学习

    MySQL 事务 学习 事务 事务 ACID原则 原子性 一致性 隔离性 持久性 原子性 Atomicity 要么都成功 要么都失败 一致性 Consistency 事务前后的数据完整性要保持一致 隔离性 Isolation 每个事务之间相
  • ThreadLocal 的工作原理

    ThreadLocal 是线程的内部数据的存储类 通过它可以在指定线程中存储数据 数据存储以后只有在指定的线程中才能获取到对应的存储的数据 其他线程无法获取到数据 下面通过一个小块代码来分析一下它的使用 private ThreadLoca
  • C++替换string中的\“为“

    1 背景 有一个项目需要我解析后台服务器返回的XML数据 但是因为后台Http接口返回的数据包是Json XML只是其中的一部分 如下图所示 可见 XML数据中 节点的属性数据都是 这实际上是不符合XML规范的 也就无法正常解析 需要我自己
  • 原数组转稀疏数组,稀疏数组转原数组,稀疏数组写入磁盘,从磁盘恢复原数组

    代码实现 import java io BufferedReader import java io File import java io FileReader import java io FileWriter import java u
  • JavaScript 也可以面向对象

    由于js语言本身语法的灵活性 使得在js程序中出现了各种各样的代码风格 但也因为如此 导致了代码的可读性和可维护性大大降低 特别随着项目的不断更新 js代码的不断更新 到后期时甚至连自己的代码都不知然了 因此确定一种好的代码风格是很有必要的
  • FTP,Telnet,SMTP,DNS,TFTP,WWW,POP采用的是TCP协议还是UDP协议?各自默认的端口号是多少?

    FTP 采用TCP协议 默认端口21 TELNET采用TCP协议 默认端口23 SMTP采用UDP协议 默认端口25 DNS采用UDP协议 默认端口53 TFTP采用UDP协议 默认端口69 WWW采用TCP协议 默认端口80 POP采用T
  • C++函数重载 (初学)

    恶补C 中 看视频学到了函数重载 放一些笔记以备后面回顾 函数重载规则 1 函数名相同 2 参数个数不同 参数的类型不同 参数个数不同 参数顺序不同 均可构成重载 3 返回值类型不同则不可以构成重载 如 int p int a 和 floa
  • 【信息收集】指纹识别

    一 指纹识别介绍 指纹收集是信息收集非常重要的一个环节 通常包括系统 中间件 web程序 防火墙四个方面 比如在web程序指纹中的cms识别可以直接查找已有的漏洞进行利用 其他方面也都有助于下一步的攻击操作 先来几个在线工具 yunsee
  • Vue自定义指令 传递参数

    在项目开发过程中 难免会遇到各种功能需要使用Vue自定义指令 directive 去实现 关于directive的使用方式这里就不做过多的介绍了 Vue官方文档中说的还是听明白的 今天讲讲在使用Vue自定义指令过程中 1 怎么数据传递到自定
  • Idea 设置类和方法的注释(获取参数)

    Idea 添加注释 类注释 方法注释 类注释 方法注释 类注释 File Setting Editor File and Code Templates Class 注释模板 description author fqtang time DA
  • nginx下location的root和alias指令配置总结

    Nginx配置中location root和alias的关系一直很让人困惑 查询好多资料也没能搞明白 于是自己进行了实际操作 总结如下 1 root指令 说明 在location和root上 后面可以带 也可以不带 效果一样 tree da
  • centos7 RPM包之rpm命令

    RPM包与源码包的区别 1 软件包分类 源码包 C源代码包 rpm包 编译之后的二进制包 2 源码包 优点 开源 可以自由选择所需功能 可看源代码 卸载方便 直接删除安装位置 缺点 安装步骤过多 编译时间过长 3 RPM包 优点 使用简单
  • shell 输出7的倍数

    题目链接 题目描述 写一个 bash脚本以输出数字 0 到 500 中 7 的倍数 0 7 14 21 的命令 最 的语言就是shell了 注意点 数学运算用 expr 命令 且 乘法 用 在前面进行转义 变量前得加个 bin bash l
  • GETH的安装和使用(Windows)

    目录 一 Geth介绍 二 Geth安装 1 下载安装 2 配置环境变量 三 Geth私有链搭建 1 创建创世块文件 2 初始化区块链 3 启动私有节点 四 账户交易 1 创建账户 2 挖矿操作 3 查看区块和奖励 4 转账交易 一 Get
  • openGL之API学习(八十)狭义的游戏引擎的定义

    狭义的游戏引擎的定义 wiki 图形渲染 粒子系统 物理系统 骨骼系统 角色系统 动画系统 场景管理 可视剔除 层次细节 界面模块 脚本接口 纹理模型资源管理 音频功能 网络模块 AI模块 视频功能 更新功能 多核支持 外围工具链
  • Cannot find template location: classpath:/templates/(please add some templates or check your Thymel)

    一 异常信息 Cannot find template location classpath templates please add some templates or check your Thymeleaf configuration
  • C++ shared_ptr和std::move

    以shared ptr为参数调用std move并用等于号时 会调用共享指针的移动构造函数 从而使原共享指针失效 include