[C++11]独占的智能指针unique_ptr的初始化和使用

2023-11-04

  1. std::unique_ptr
    是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个
    unique_ptr 赋值给另一个 unique_ptr。
  2. std::unique_ptr 不允许复制,但是可以通过函数返回给其他的 std::unique_ptr,还可以通过 std::move
    来转译给其他的 std::unique_ptr,这样原始指针的所有权就被转移了,这个原始指针还是被独占的。
  3. 使用 reset 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针。
  • ptr1.reset(); 解除对原始内存的管理
  • ptr2.reset(new int(250)); 重新指定智能指针管理的原始内存

代码如下:

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

class Test
{
public:
	Test()
	{
		cout << "construct" << endl;
	}
	Test(int x) :m_num(x)
	{
		cout << "construct x = " << x << endl;
	}
	Test(string str)
	{
		cout << "construct str = " << str << endl;
	}

	~Test()
	{
		cout << "destruct" << endl;
	}

	void setValue(int v)
	{
		m_num = v;
	}

	void print()
	{
		cout << "m_num = " << m_num << endl;
	}

private:
	int m_num;
};


int main()
{
	//通过构造函数初始化
	unique_ptr<int>ptr1(new int(9));
	//unique_ptr<int>ptr2 = ptr1; error

	//通过移动构造函数初始化
	unique_ptr<int>ptr2 = move(ptr1);

	//通过reset初始化
	ptr2.reset(new int (8));

	//获取原始指针
	unique_ptr<Test> ptr3(new Test(1));
	Test*pt = ptr3.get();
	pt->setValue(2);
	pt->print();

	ptr3->setValue(4);
	ptr3->print();
	return 0;

}

测试结果:

在这里插入图片描述

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

[C++11]独占的智能指针unique_ptr的初始化和使用 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • JavaScript从键盘输入三个整数分别存入变量,从小到大进行排序

    键盘输入prompt prompt 方法用于显示可提示用户进行输入的对话框 这个方法返回用户输入的字符串 所以对输入的数字要进行类型转换 var num1 prompt 请输入第一个数 var num2 prompt 请输入第二个数 var
  • AI与大数据的关系

    最近在忙着专业分流的事情 自己纠结的专业主要就是人工智能和大数据 找了很多资料 终于整理出二者的关系 原文地址 https www sohu com a 224177824 764294 更专业一些的分析可以看这篇文章 https blog
  • 校园网开热点显示无Internet连接和360免费WiFi猎豹WiFi冲突解决办法

    校园网开不了热点或者用360免费WiFi发生冲突 问题 校园网 连接后有网络显示无Internet连接 也开不了热点 解决方法 方法一 使用像360免费WiFi类的软件进行开热点 同时你需要开启校园网模式 开启校园网模式 校园网模式可以避免
  • 与fo论禅汇总

    与佛论禅网络上现在共包含三个版本 与佛论禅 与佛论禅 与佛论禅重制版 与佛论禅重制版 Takuron 新与佛论禅 新约佛论禅 佛曰加密 PcMoe 有几个注意点 1 别拿百度引擎 翻墙拿谷歌 2 三个网站的使用逻辑不同 加密解密的输入框不一
  • Zookeeper已经分布式环境中的假死脑裂

    Zookeeper简介 在上班之前都不知道有这样一个东西 在开始说假死脑裂之前先说说Zookeeper吧 Zookeeper zookeeper是一个分布式应用程序的协调服务 它是一个为分布式应用提供一致性服务的软件 提供的性能包括 配置维
  • 基本数据类型强制转换问题-值的截断和内存的截断

    1 double a1 22 32 int b1 int a1 2 double a2 2 5e20 int b2 int a2 按照浮点数到整数的转换语义 结果应该截去浮点数的小数部分 而保留整数部分 所以b1应该为22 而b2则超出了其
  • 刷脸支付可针对客户做二次营销活动

    随着智能手机和WIFI的普及 80 的顾客都不再拿钱包 而是掏出手机付款 大到商店小到早点摊菜市场 只要拿出手机轻轻一扫 便可以完成整个购买流程 而如今 支付4 0时代已经到来 基于生物识别技术 不用手机 万物可付 李嘉诚说 当一项新鲜事物
  • MySQL高级篇-第06章_索引的数据结构

    1 为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构 就好比一本数课书的目录部分 通过目录中找到对应文章的页码 便可快速定位到需要的文章 MySQL中也是一样的道理 进行数据查找时 首先查看查询条件是否命中某条索引 符合则通
  • 找第一个只出现一次的字符c++

    找第一个只出现一次的字符 提交数 3563 通过率 43 14 平均分 61 55 题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 如果没有 输出no 输入格式 一个字符串 长度小于100000 输出格式 输出第一
  • rabbitmq初学之连接测试

    最近在搞接口 需要用到rabbitmq 在公司搞了一个下午还是连接不上 后来细看了英文说明 测试连接成功 得出如下报错几点 我用的安装包 otp win64 17 0 exe erlang vm 和rabbitmq server 3 3 1
  • 消息队列-kafka入门详解

    本文适用于初学者 学习kafka之前 应该都知道它是消息队列 但是和我们印象中数据结构的队列不同的是 它持久化到磁盘上 1 我们首先从定义来看 Kafka 一个分布式的 分区化 可复制提交的日志服务 我们先来想想什么是分区 好比图书馆的书
  • pcb过孔与电流对照一览表_PCB设计项目能不能成功,这个因素占了30%

    电源平面的处理 在PCB设计中占有很重要的地位 在一个完整的设计项目中 通常电源的处理决定项目的30 50 的成功率 本次给大家介绍在PCB设计过程中电源平面处理应该考虑的基本要素 1 做电源处理时 首先应该考虑其载流能力 其中包含2个方面
  • QT-通用的软件界面框架,好看且实用

    QT 通用的软件界面框架 好看且实用 前言 一 演示效果 二 配置说明 三 关键程序 四 程序下载 前言 常规软件开发 使用这种界面框架 基本是可以做很多个常规项目 比较有参考意义 本次软件使用开发的环境是QT5 13 2 VS2017 不
  • House Man 【HDU - 3440】【差分约束】

    题目链接 就是我们必须跳N 1次 从最小的房子跳到最高的房子 然后呢 求最小的房子和最高的房子之间的最长的可能距离 那么就是差分约束咯 我们可以这么推 首先 对于所有的点 a i a i 1 gt 1 那么转换一下 就是a i 1 a i
  • vue 从后端取图片返回发现是两张,但自己只要一张图片 怎么操作

    1 用JavaScript里边常用的分隔符去操作 item original status user profile image url split 0
  • Redis的hyperloglog

    互联网名词 什么是UV Unique Visitor 独立访客 一般理解为客户端IP 需要去重考虑 什么是PV Page View 页面浏览量 不用去重 什么是DAU Daily Active User 日活跃用户量 登录或者使用了某个产品
  • 【7】Docker中部署RabbitMQ

    1 拉取镜像 docker pull rabbitmq 3 8 5 根据我之前在VMware的Centos中装过的 rabbitmq 版本来拉取 3 8 5 的版本 拉取指定版本 3 8 5 的 rabbitmq 镜像 2 守护方式 创建容
  • 最大化参数 火车头_火车头多少吨

    展开全部 火车头的重量一般是126 132吨 最重的是韶山4型改进型车头 重量为184吨 车型62616964757a686964616fe58685e5aeb931333433623735不同而所用的火车头型号也不尽相同 重量也有所差异
  • 代码随想录算法训练营打卡第一天

    代码随想录算法训练营第1天 Leetcode704 二分查找 27 移除元素 704 二分查找 视频链接 https www bilibili com video BV1fA4y1o715 第一遍读题思考 五分钟内 如果没有思路就写暴力解法
  • [C++11]独占的智能指针unique_ptr的初始化和使用

    std unique ptr 是一个独占型的智能指针 它不允许其他的智能指针共享其内部的指针 可以通过它的构造函数初始化一个独占智能指针对象 但是不允许通过赋值将一个 unique ptr 赋值给另一个 unique ptr std uni