c++pointer踩坑记录 (std::move, shared_ptr)

2023-10-31

要实现的需求:

拿到一个指向数据的void * 指针;用这个指针替换旧对象数据。

要求: 不额外申请内存

我在这过程中搜过的问题 && 看的知识点:

  • how to use enum in c++
  • use std::move to pointer
  • std::vector指针的下标“[]”的使用
  • std::unique
  • shared_ptr
  • 构造函数

enum 使用

现在我有一个 enum 类型的结构体:

enum Flags {
    ON_DEVICE = 0x01,
    SHARE = 0x02,
    DATA = 0x04,
    SYNC = 0x010000,
};
uint32_t flags;

问:我该如何给flags赋值呢?
答:

	flags = ON_DEVICE
	cout<<flags<<endl;
	1

use std::move to pointer

对pointer 使用std::move 是无意义的。
std::move 是右值引用,它将move的右侧对象,转移给左边 ⬅️,减少拷贝:

int a = 9;
int b = std::move(a);

等价于

int a;
int b = 9;

a 去哪了呢? a 为空了,b 获得了a 之前的值:

if b has, its own buffer in memory - after std::move()ing
the compiler can have another object own it instead.

再来看pointer, pointer 并不拥有资源,它只是指向内存,对它进行 std::move操作 和直接进行操作没有区别,返回对都是指向的地址。所以使用std::move 对 引用和指针而已都是无意义的。


std::vector指针的下标“[]”的使用

下标【】返回的是对象的引用,vector 会自动调整自身大小来满足所需。
我比较疑惑的是 vector 的内存机制,我之前只知道vector的的大小会自动调整,一旦达到容量极限,会重新申请一个两倍大小的新内存。
这样,在这个问题上就是:

修改前,用与存放的vector大小为1,实际存放的数据为空。
我现在需要修改vector中的对象(因为只有一个,所以是vector.front() )


shared_ptr

我先是想要修改旧的对象:将旧数据指针,指向新指针指向的对象。
但是发现一个问题,这旧的数据指针是shared_ptr指针,新&旧指针指向同一个对象。
引用计数=2 ,新指针有可能在其他地方也会用到,但只有引用计数=0时指针才会释放所值对象。意味着要等新指针不再使用才能释放,不知道啥时候能销毁。。
体现不了智能指针自动销毁特性。

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

c++pointer踩坑记录 (std::move, shared_ptr) 的相关文章

  • Python——第三章 程序的控制结构

    3 1程序的分支结构 3 1 1程序的判断条件 not表示单个条件的 否 关系 and表示多个条件之间的 与 关系 or表示多个条件之间的 或 关系 当and存在时 只要存在false 结果为false 当or存在时 只要存在true 结果
  • Windows&Linux共享文件夹之利用Linux系统创建共享文件夹

    这种方法是利用Linux来创建共享文件夹 流程 在Linux上创建共享文件夹 Windows上去访问和映射Linux的共享文件夹 就可以实现对Linux上的文件进行操作 在Linux上创建共享文件夹 先在Linux下新建文件夹 点击属性 打
  • 嗨翻C

    1 main函数 当计算机运行程序时 它需要一些方法来判断程序是否运行成功 计算机正是通过检查main 函数的返回值来做到这一点的 如果让main 函数返回0 就表明从程序运行成功 如果让它返回其他值 就表示程序在运行时出了问题 如果想检查
  • 开源项目使用及选型

    一 为什么选择开源项目 1 快速开发 2 站在巨人的肩膀上 成熟的开源项目 功能完善 设计优秀 细节点考虑周全 不用像自己开发一样需要从头去全面开发 测试 完善 本身也是好的学习材料 Android 本身就是在 Linux Java 上发展
  • 计组(day3)8086指令系统——算术运算指令(加减指令)

    知识点 1 加法运算指令 1 1 普通加法指令ADD 1 2 带进位加法指令ADC 1 3 加1指令INC 2 减法指令 2 1 不考虑借位的减法指令SUB 2 2 考虑借位的减法指令SBB 2 3 减1指令DEC 2 4 求补指令NEG
  • 在hexo中使用mathjax的方法

    欢迎光临我的个人主页 之前总是使用mathtype写公式然后再上传图片 速度太慢了 而且公式出错后不容易修改 所以开始用mathjax 但是原生hexo并不能直接渲染mathjax 查阅资料总结了一波 只需五步 可以先换成淘宝的下载源 增加
  • PostgreSQL 函数 for循环使用

    Postgresql 函数例子 本业务是实现将之前已经使用的数据和现在的数据关联起来 需要写个sql函数初始化数据 数据库使用的是postgresql 具体代码 create or replace function insert user
  • import与from xx import遇到的一点问题-python学习

    今天在python的运行框里分别输入import datetime datetime 和 from datetime import datetime 本以为结果应该是一样 结果前者却报错 gt gt gt import datetime d
  • WPF 控件库Live Charts 折线图平移及缩放功能

    功能效果如上图所示 使用Chart Zoom 默认为None 和Chart Pan 默认为Unset 使用鼠标滚轮放大 缩小 单击 按住并拖动以进行平移 后台代码 using System using System ComponentMod
  • 解决Error creating bean with name ‘sqlSessionFactory‘ defined in class path resource

    Error creating bean with name sqlSessionFactory defined in class path resource 出错背景 项目中使用mybatisplus开发 涉及到了xml文件 现在需要下线个
  • window横向渗透-IPC命令&schtasks 计划任务上线

    0x01 条件 1 我们获取到目标主机管理员账号密码 并且目标主机的 139 445端口是开启的 0x02 建立ipc协议拷贝cs木马 这时候 我们可以先建立ips 协议 net use ip ipc 密码 user 账号 例子 net u
  • 飞桨框架2.0RC新增模型保存、加载方案,与用户场景完美匹配,更全面、更易用

    通过一段时间系统的课程学习 算法攻城狮张同学对于飞桨框架的使用越来越顺手 于是他打算在企业内尝试使用飞桨进行AI产业落地 但是AI产业落地并不是分秒钟的事情 除了专业技能过硬 熟悉飞桨的使用外 在落地过程中还会遇到很多细节的问题 这不 他就
  • 通过 docker-compose 快速部署 Apache Ambari 保姆级教程

    文章目录 一 概述 二 前期准备 1 部署 docker 2 部署 docker compose 三 Apache Ambari 编排部署 1 获取 Ambari 安装包 2 yum 源配置文件 3 用户和库初始化sql文件 4 启动脚本
  • Windows系统下Python如何执行命令行关闭指定进程

    Windows系统下Python如何执行命令行关闭指定进程 具体代码如下 coding utf 8 import time import os def test cmd 打开excel文件 os popen r D 1 xlsx 打开exc
  • 判断日期是不是节假日

    现象 判断日期是不是节假日 方法 通过访问网络地址传入时间参数进行判断 1 判断日期是不是节假日的方法 2 发送网络请求判断的方法 3 发送网络请求关闭输入输出流步骤 确定是不是节假日 是节假日返回false 工作日进行数据抓取返回true
  • 测试网站漏洞软件,如何检测网站漏洞,web漏洞扫描工具盘点

    一 常见漏洞 1 高危漏洞 自媒体www 777n com XSS跨站脚本漏洞 由于程序员在编写程序时对用户提交的数据没有做充分的合规性判断和进行HTML编码处理 直接把数据输出到浏览器客户端 这样导致用户可以提交一些特意构造的脚本代码或H
  • opencv之图像二值化处理

    opencv二值化操作分为 全局阈值和局部阈值两种 在进行图像二值化之前需要对图片进行灰度处理 全局阈值 全局阈值分为 手动阈值和自动阈值两种 手动阈值 opencv函数 threshold gray src dst threshold v
  • [激光原理与应用-54]:《激光焊接质量实时监测系统研究》-5-试验结果及分析

    目录 5 1 实验条件 5 2 焊接正常信号分析 5 2 1 正常焊接过程 5 2 2 时域 原始波形 5 2 3 时域 统计分析后的波形 5 3 缺陷信号分析 5 3 1 缺陷焊接过程 5 3 2 时域 原始信号 5 3 3 时域 统计处
  • 并发编程之——AQS原理和阻塞队列变化

    1 AQS简介 2 源码分析 2 1 线程阻塞 2 2 线程唤醒 1 AQS简介 AQS全名 AbstractQueuedSynchronizer 它就是Java的一个抽象类 它的出现是为了解决多线程竞争共享资源而引发的安全问题 细致点说A
  • HTTP协议详解(真的很经典)

    HTTP协议详解 真的很经典 2008 11 03 09 11 by Hundre 711330 阅读 32 评论 收藏 编辑 转自 http blog csdn net gueter archive 2007 03 08 1524447

随机推荐

  • QT之QDir文件目录拷贝、创建、删除

    在开发过程中 需要用到文件的一些处理 例如文件夹的拷贝 文件夹删除或创建 文件的拷贝 删除等操作 Qt已经包含了这些操作 作为一个跨平台的开发工具 这些功能绝对会帮助你在跨平台开发中很方便 Qt中QDir类实现了对文件夹和路径的处理 QFi
  • swagger对json数据的处理

    在实习中遇到了一个不寻常的事情 今天和同事讨论一个小问题 同事使用swagger 想要调用一个接口 这个接口要传递一个json对象 对应java的一个实体类 但是有一个属性同事不想看到它 就用 JsonIgnore给注掉了 当时这个我不知道
  • gulp4.0入门, 看这一篇就够了

    前言 之前我们讲了gulp3 0 这篇引入gulp4 0 4 0相比3 0有一些改变的地方 gulp3 0压缩顺序默认是顺序执行的 4 0引入压缩并行的处理方式 gulp series 4 0 依赖顺序执行 gulp parallel 4
  • C# ASP.NET 连接MySQL 如何先进行多条件查询,然后进行数据库插入操作

    数据库内有很多字段 但是2个字段 id mac id 中的任何一个都不能在数据库的记录中重复 WEB网页上有n个TEXTBOX控件 用于输入数据库字段的值 其中 textbox1输入id字段值 textbox3输入mac id字段的值 插入
  • Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租

    我们在编写Python爬虫时 有时会遇到网站拒绝访问等反爬手段 比如这么我们想爬取蚂蚁短租数据 它则会提示 当前访问疑似黑客攻击 已被网站管理员设置为拦截 提示 如下图所示 此时我们需要采用设置Cookie来进行爬取 下面我们进行详细介绍
  • VTM1.0代码阅读:compressCtu函数

    compressCtu函数是对一个ctu进行编码的函数 入口参数cs是pictrue的cs 这个cs里面存储当前帧的所有已编码过CTU的cu pu tu等信息 area为当前要编译ctu的区域 ctuRsAddr为当前ctu的rs扫描地址
  • 【笔记-node】《imooc-nodejs入门到企业web开发中的应用》

    目录 课程名 备注 入门必学 nodejs入门到企业web开发中的应用 框架与工具 node js koa2 mysql打造前后端分离精品项目 旧岛 项目实战 20190317 20200720 imooc nodejs入门到企业web开发
  • DTO/VO/Entity等数据类型转换

    DTO VO Entity等数据类型转换 在web开发中 前端传递数据给后端时采用DTO类型 而存入数据库时则采用entity类型 这样的操作存在类型转换 如果我们一个一个的设值也就太麻烦了 我们可以采用spring提供的jar包来解决这样
  • 计算机 创新方法举例,列举列举五种创新的方法并加以举例说明

    一 简化模式 在研发新产品时 我们总会不自觉的想要在产品上增加新的特色或功能 导致产品使用起来越发复杂 这样的画蛇添足对产品来说是一种负担 我们要运用简化模式 主要是将产品中多余的属性移除 再增加新功能 例如 手机从键盘按键模式变成触屏的虚
  • mybatisPlus update更新部分字段

    第一种方式 其中 lambdaUpdateWrapper set 表示要更新的字段值 eq 则表示 WHERE 条件 public void updateEntity LambdaUpdateWrapper
  • 人工智能AI生成的艺术:从文本到图像、视频、3D建模

    继去年火遍全网的虚拟人之后 AI绘画又成了今年热议的科技话题 AI绘画就是 以文生图 打通了文字和图像的隔阂 只要输入一段文字描述 AI 就可以把用户脑海中想象的画面呈现出来 这是一种文字转图像 Text to image 特性的崭新交互方
  • 基于SpringBoot的在线教育平台系统

    基于SpringBoot Vue的线教育平台系统 前后端分离 开发语言 Java 数据库 MySQL 技术 SpringBoot Vue Mybaits Plus ELementUI 工具 IDEA Ecilpse Navicat Mave
  • 【专题5: 硬件设计】 之 【69.开关电源 之 如何计算buck电路占空比和电感的计算】

    嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有 无所谓无的 这正如脚下的路 其实地上本没有路 走的人多了 也便成了路 原创不易 文章会持续更新 欢迎微信扫码关注公众号 承接 小程序 嵌入式 PC端项目开发 联系作者
  • Apache Kafka Connect JNDI注入漏洞复现(CVE-2023-25194)

    1 产品简介 Kafka Connect是一种用于在Apache Kafka和其他系统之间可扩展且可靠地流式传输数据的工具 它使快速定义将大量数据移入和移出Kafka的连接器变得简单 Kafka Connect可以摄取整个数据库或从所有应用
  • STM32+SG90舵机详解(详细)

    上一次使用舵机只是草草了解 只大概知道是pwm控制的 这次又使用到了舵机 本以为复制上次代码就可以调试成功 没想到却弄了很久 我使用的是STM32f103c8t6 用的是定时器4 这个f1板子的定时器各个通道io口如下图所示 在开始之前我们
  • git push -u origin master

    1 错误描述 出错场景描述 github上创建远程仓库的时候选择添加README md文件 git bash连接远程库 然后执行push操作 出现下面的问题 git push u origin master To github com XX
  • Linux 下存放ssh信息的文件位置

    vi root ssh known hosts root prme stg dhcp1649 StorageJavaAuto cat root ssh known hosts prme stg188 eng vmware com 10 11
  • axure创建网页

    最近发现一个好玩的东西 就是axure了 学习操作了下 弄出了一个简单的搜狗页面还有登录界面 该有的交互也弄了些 感觉挺好玩的 也扒拉下生成了html 好好看看 代码可能有点长 你忍一下qwq
  • Ubuntu小技巧19--Kibana安装方法

    Ubuntu小技巧19 Kibana安装方法 Kibana 是一款开源的数据分析和可视化平台 它是 Elastic Stack 成员之一 设计用于和 Elasticsearch 协作 可以使用 Kibana 对 Elasticsearch
  • c++pointer踩坑记录 (std::move, shared_ptr)

    要实现的需求 拿到一个指向数据的void 指针 用这个指针替换旧对象数据 要求 不额外申请内存 我在这过程中搜过的问题 看的知识点 how to use enum in c use std move to pointer std vecto