C++ shared_ptr的reset 用法

2023-05-16

#include <iostream>
#include <memory>
class Tmp {
   public:
    Tmp(int a);
    ~Tmp();
    void print__a() { std::cout << "value = " << __a << std::endl; }

   private:
    int __a;
};

Tmp::Tmp(int a) : __a(a) {
    std::cout << "start" << __a << std::endl;
}

Tmp::~Tmp() {
    std::cout << "finish" << __a << std::endl;
}

int main() {
    std::shared_ptr<Tmp> sp;  // empty

    Tmp *xx = new Tmp(10);
    sp.reset(xx);  // takes ownership of pointer
    sp->print__a();

    std::cout << "============11" << std::endl;
    Tmp *tt = new Tmp(20);
    sp.reset(tt);  // takes ownership of pointer
    sp->print__a();
    std::cout << "============22" << std::endl;

    sp.reset();  // deletes managed object
    // sp->print__a();  //crash
    if (!sp.get()) {
        printf("empty\n");
    }
    return 0;
}

打印结果:

start10
value = 10
============11
start20
finish10
value = 20
============22
finish20
empty

  • 所以reset()就是把shared_ptr赋空,reset(new Tmp(10)); 就是把shared_ptr 指向new Tmp(10)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ shared_ptr的reset 用法 的相关文章

  • 为什么 form.reset() 在此页面回发后不起作用?

    我班上的一位学生引起了我的注意 但我对此没有任何解释 而且在搜索后我也找不到任何解释 点击提交按钮后 重置按钮不起作用 就好像如果通过 post 请求请求资源 浏览器会阻止重置
  • 如何恢复MySQL root用户的全部权限

    我不小心删除了 MySQL root 用户的所有权限 有什么方法可以将该用户恢复到其原始状态 具有所有权限 我正在使用mysql工作台6 0 请让我逐步知道解决方案 因为我是 sql 新手 第一次尝试 GRANT ALL ON TO roo
  • 重置输入字段而不执行验证

    我有一个 Facelets 视图 如下所示
  • 删除 Windows 上 Git 的缓存密码[重复]

    这个问题在这里已经有答案了 我最近在工作中更新了我的 Github 密码 公司 Github 帐户 我已经在我的一台虚拟机 Windows 10 上配置了 Git 但每次都不会git pull or git push它抛出错误消息 remo
  • 如何在 R 中重置 par(mfrow)

    我设置了 par mfrow c 1 2 现在每次我绘制它时 它都会显示将其分成 2 个图 我怎样才能将其重置为仅显示一个图 非常感谢 您可以重置 mfrow 参数 par mfrow c 1 1
  • 操作完成后如何重置 EditText?

    我想在按下按钮后将我的 EditText 重置回空的 空间 或 提示 该按钮将使用 EditText 字段的输入完成活动 我与 Android 的冒险就这样开始了 干杯 谢谢 SEND SMS btnSendSMS Button findV
  • 如何在此代码中重置放置区?

    Dropzone options imageFile url HOST NAME USER NAME BUILDER API image method POST enter code here acceptedFiles jpg jpeg
  • 使用 Libtool 将静态库强制链接到共享库

    我有一个图书馆 libfoo 编译后的使用libtool分成两个对象 libfoo a 和 libfoo so 我必须创造 使用libtool另外 另一个图书馆 libbar 这将是一个包含所有 libfoo 代码的共享库 libbar s
  • CGAffineTransform重置

    3我有一个可以通过触摸操作的图像 假设它是一个向上的箭头图像 旋转 180 度后 箭头现在指向下方 我想重置 CGAffineTransform 属性所以它认为现在又回到了 0 度 我想要这个是因为无论图像的角度是 0 还是 180 我都必
  • 如何重置 jquery 动画以重新开始?

    我已经构建了一段不错的代码 一些动画和一些单击 悬停事件 其中只有一小行 我打算在多个 html 文档上使用它 这是一个游戏 你必须得到正确的答案并继续下一个问题 用全页滑块构建在另一个 html 中 我不想加载 DOM 多个次 毫无意义
  • C++ 使用 .o 链接和使用 .a 文件链接之间存在差异:行为不同,为什么?

    我期望 与 o 文件链接和与从 o 文件存档的 a 文件链接应该没有区别 但事实并非如此 我有2个源文件 每个都声明1个类 1个静态对象 1个函数 以及一个调用其中一个函数的main cpp cat First cpp include
  • 异常后重置 Cuda 上下文

    我有一个使用 Cuda C 的工作应用程序 但有时 由于内存泄漏 会引发异常 我需要能够实时重置 GPU 我的应用程序是服务器 因此它必须保持可用 我尝试过类似的方法 但似乎不起作用 try do process using GPU cat
  • 如何重用/重置 ZipInputStream?

    我想重置 ZipInputStream 即回到起始位置 以便按顺序读取某些文件 我怎么做 我好卡住 ZipEntry entry ZipInputStream input new ZipInputStream fileStream item
  • Java中共享内存的任何概念

    AFAIK Java中的内存是基于堆的 内存是动态分配给对象的 并且没有共享内存的概念 如果没有共享内存的概念 那么Java程序之间的通信应该是很耗时的 在 C 中 与其他通信模式相比 通过共享内存进行进程间通信更快 如我错了请纠正我 另外
  • Outlook Mapi 访问共享联系人

    我想通过 Mapi 从 Outlook 导入联系人 第一步使用标准接触是没有问题的 MAPIFolder contactObjects outlookObj Session GetDefaultFolder OlDefaultFolders
  • 还有其他方法让 Laravel 重新加载环境变量吗?

    我在知名主机上有一个共享托管帐户 我的 Laravel 网站已上传并大部分正常运行 但我必须改变环境 现在我无法让 Laravel 看到更改 我知道这是常见问题 我尝试运行 artisan 命令来清除配置和缓存 php artisan co
  • 通过“后退”按钮重置表单

    试图找到一个优雅的解决方案来重置网络表单 或更具体地说两个INPUT Type hidden 字段 如果用户在提交表单后返回 据我所知 后退 按钮不会触发 onload 事件 但有什么办法可以解决这个问题吗 当按下后退按钮时 onbefor
  • Djangolush 与 sqlclear 和syncdb

    谁能告诉我们之间是否有区别 gt manage py flush or reset and gt manage py sqlclear appname python manage py dbshell gt manage py syncdb
  • FPGA 系统中的同步与异步复位

    我刚开始使用各种不同的模块创建 FPGA 系统来驱动 I2C 总线 尽管我认为这个问题适用于任何 FPGA 系统 并且所有模块都使用同步复位 这些模块使用时钟分频器模块进行计时 该模块获取系统时钟并向系统的其余部分输出较低的频率 我遇到的问
  • 将 Azure CDN 与共享访问签名结合使用

    我正在尝试合并 Azure 来存储应用程序的大部分文件 我想将这些文件上传到 azure 中的私有容器和私有 blob 并通过 Azure CDN 将这些上传内容复制到所有其他节点 仍然作为私有容器和 blob 然后 我希望我的应用程序向存

随机推荐

  • LWIP网络-基于STM32平台

    LWIP P1无操作系统移植RAW UDP实验RAW TCP实验Webserver实验 P1无操作系统移植 MAC 43 PHY 通过符合 IEEE802 3的MII和RMII接口与外接快速以太网PHY进行通信 MII和RMII实现数据交换
  • 树莓派学习

    树莓派学习教程 系统安装数据源的更新与配置命令设定固定IP网络地址 xff1a 法一法二 给树莓派安装中文环境和中文输入法远程控制树莓派SSH方式 xff1a 通过putty软件实现 xff08 不需要屏幕 xff09 VNC方式 xff0
  • C++学习教程

    C 43 43 学习教程 C 43 43 内存分区模型数据类型循环语句for循环语句 跳转语句指针指针 数组 函数 结构体指针 内存分区模型 工具vs codeDEV C 43 43 C 43 43 内存分区模型 程序运行前 全局区和代码区
  • core dumped ?完了?

    微信公众号 xff1a linux码头 core dumped xff1a 当程序在运行过程中发生异常 xff0c 这时linux系统可以把程序出错的内存 内容存储在一个core文件中 xff0c 又叫核心转存 应用程序在运行过程汇总经常会
  • Ubuntu18.04安装网络调试助手 NetAssist

    下载地址 链接 xff1a https pan baidu com s 1DUqZBtxFh pGTsRR2kXaPA 提取码 xff1a fp32 安装步骤 1 xff09 建立依赖关系 sudo apt get install f 2
  • C语言中左移(<<)和右移(>>)的理解

    lt lt 左移 xff1a 相当于乘法 a lt lt b 61 a 2 b 举例 xff1a 1 lt lt 5 xff0c 相当于1 2 5 61 32 1 lt lt 0 xff0c 相当于1 2 0 61 1 gt gt 右移 x
  • 《Linux运维总结:firewalld防火墙使用教程》

    文章目录 一 firewalld基础知识1 1 firewalld基本介绍1 2 firewalld与iptables关系与区别1 3 firewalld默认策略1 4 firewalld配置模式1 5 firewalld配置方法1 6 f
  • ROS常用的功能包

    坐标系 坐标变换 xff08 tf xff09 tf功能包提供了一个基于ROS的分布式框架 xff0c 可以随着时间的推移计算多个坐标系的位置 3D可视化工具 xff08 rviz xff09 机器人模型的可视化 图像数据的可视化 地图数据
  • 树莓派4B+Ubuntu 18.04 LTS + 桌面desktop + ros安装@树莓派4B、Ubuntu、desktop、ros

    树莓派4B 43 Ubuntu 18 04 LTS 43 桌面desktop 43 ros安装 64 树莓派4B Ubuntu desktop ros 久违的一篇博客 xff0c 说实话CSDN的编辑器还是用不太习惯 xff0c 记录一下树
  • 云台控制协议总结(VISCA/PELCOD/PELCOP)

  • error: #20: identifier "TIM_TimeBaseInitTypeDef" is undefined

    如果出现多句错误 xff1a identifier 34 34 is undefined 解决问题方法一 xff1a C C 43 43 include paths 把文件路径添加进去 解决问题方法二 xff1a 在stm32f10x co
  • 使用pyqt5实现键盘(含组合键)鼠标事件响应

    使用pyqt5实现键盘 xff08 含组合键 xff09 鼠标事件响应 使用python3 6 xff0c pyqt5 xff0c 在macOS上测试有效 span class hljs keyword import span sys sp
  • 递归思想刷题总结

    核心思想 我们在调用递归函数的时候 xff0c 把递归函数当做普通函数 xff08 黑箱 xff09 来调用 xff0c 即明白该函数的输入输出是什么 xff0c 而不用管此函数内部在做什么 xff08 千万不要跳进去了 xff0c 你脑袋
  • anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions

    在keil工程下移植代码 xff0c 编译出现了这个问题 xff0c 字面上解决办法有 xff1a 1 打开GNU模式 option gt GNU extensions 2 在代码前加上 pragma anon union 就是代表支持匿名
  • 串口的深入理解

    1 串口是如何发送数据的 xff1f 一般说来 xff0c 串口发送数据是往数据寄存器sbuf填写数据 xff0c 一个字节一个字节的写入 xff0c 如果有串口中断 xff0c 那么发送完一个字节的数据 xff0c 就会进入串口中断一次
  • CMakeLists.txt的简单使用

    Makefile和CMakeLists的关系 环境准备 xff1a 需要安装gcc xff0c g 43 43 xff0c make sudo apt get install gcc g 43 43 sudo apt get isntall
  • .so文件的基本理解,使用。

    一 基本概念 Linux下的 so是基于Linux下的动态链接 其功能和作用类似与windows下 dll文件 代码编译 xff0c 链接 xff0c 最后生成可执行文件 xff1b 这个可执行文件就可看作是一个静态链接 xff0c 因为代
  • jz2440:QT控制LED灯点亮熄灭(11)

    1 LED灯的驱动 xff1a 首先要准备好在驱动文件 xff0c 通过insmod led ko来加载模块 xff0c 然后在QT的代码里面配合调用open xff0c write read函数来点亮 xff0c 关闭LED灯 这一步 x
  • win10下安装ubuntu双系统

    本文章记录自己在Win10系统下安装ubuntu双系统的过程 xff0c 以及注意事项 另一个不错的安装教程 1 下载系统镜像 在官网或清华镜像 xff0c 根据需要的ubuntu版本下载需要的ubuntu镜像文件 这里要注意 xff0c
  • C++ shared_ptr的reset 用法

    include lt iostream gt include lt memory gt class Tmp public Tmp int a Tmp void print a std cout lt lt 34 value 61 34 lt