网站层级高清免费素材网

pingmian/2025/10/17 12:27:25/文章来源:
网站层级,高清免费素材网,网站工程是干啥的,家具网站首页设计简介 智能指针是一种特殊的指针类型#xff0c;它能够自动管理内存资源#xff0c;避免常见的内存泄漏和多次释放等。在C 11标准中出现了新的智能指针unique_ptr、 shared_ptr、weak_ptr等。 std::unique_ptr 用于管理动态分配的内存资源#xff0c;它提供了自动释放内存的功…简介 智能指针是一种特殊的指针类型它能够自动管理内存资源避免常见的内存泄漏和多次释放等。在C 11标准中出现了新的智能指针unique_ptr、 shared_ptr、weak_ptr等。 std::unique_ptr 用于管理动态分配的内存资源它提供了自动释放内存的功能。与原始指针相比unique_ptr有更高的安全性和易用性。 特点 所有权唯一、自动释放内存、指针语义、禁止拷贝和权限转移、自定义删除器 所有权唯一每个unique_ptr实例拥有对其所指向对象的唯一所有权。这意味着在任何时候只有一个unique_ptr可以指向一个特定的对象。 自动释放内存当unique_ptr超出作用域或被重新赋值时它所管理的内存会自动释放。这样就避免了内存泄漏的问题。 指针语义使用方式与原始指针相似可通过指针操作符-和解引用操作符*来访问所指向对象成员。 禁止拷贝unique_ptr禁止拷贝即不能进行复制构造和赋值操作。这是为了确保独占所有权的特性防止多个指针同时管理同一个对象的内存。 权限转移支持移动构造和移动赋值操作将所有权转移给新的unique_ptr而旧指针则自动释放置空无需进行内存拷贝。 自定义删除器unique_ptr可通过模板参数来指定一个删除器deleter函数对象用于在释放内存时执行额外的清理操作。 缺点 使用裸指针赋值或捕获会很容易非常的乱、导致内存泄露尽量避免智能指针和普通指针的混合。 常见成员函数 常见成员函数:operator* 解引用操作符用于获取 unique_ptr 所指向对象的引用。operator- 箭头操作符用于通过 unique_ptr 访问对象的成员函数或成员变量。get 返回指向所管理对象的裸指针。reset 重置 unique_ptr释放当前所管理的对象并接管新的对象。release 释放对所管理对象的控制权并返回该指针的裸指针。swap 交换两个 unique_ptr 的内容。示例测试 基本操作1 #include iostreamvoid unique_operate1() {/******************** 创建 ********************/// 创建方式一,初始化后修改值std::unique_ptrint pInt1(new int(10));*pInt1 101;// 创建方式二,初始化后修改值std::unique_ptrint pInt2 std::unique_ptrint(new int(20));*pInt2 102;// 创建方式三,初始化后修改值std::unique_ptrint pInt3 std::make_uniqueint(30);*pInt3 103;// 创建多个int指针对象,初始化后修改值std::unique_ptrint[] pIntArray(new int[5]{ 10,20,30,40,50 });pIntArray[0] 1;pIntArray[1] 2;pIntArray[2] 3;pIntArray[3] 4;pIntArray[4] 5;/*********************************************//******************** 输出地址及值 ********************/std::cout pInt1 *pInt1 | pInt1.get() *(pInt1.get()) std::endl;std::cout pInt1 *pInt1 | pInt1.get() *(pInt1.get()) std::endl;std::cout pInt1 *pInt1 | pInt1.get() *(pInt1.get()) std::endl;/*输出为:000002110F242540 101 | 000002110F242540 101000002110F242540 101 | 000002110F242540 101000002110F242540 101 | 000002110F242540 101*//*********************************************//******************** 权限转移 ********************/std::cout pInt1 *pInt1 std::endl;//std::unique_ptrint P1 pInt1; // 错误操作std::unique_ptrint P1 std::move(pInt1); // 正确操作。此时P1接收了pInt1的地址和值,而pInt1则被置空std::cout P1 *P1 std::endl;/*注意:pInt1由于被置空,此时无法使用否则出现异常。输出为:000002303C431670 101000002303C431670 101*//*********************************************/ }int main() {// 基本操作1unique_operate1();return 0; }基本操作2 #include iostreamclass Operate2 { public:Operate2(){std::cout call Operate2() \t this std::endl;}Operate2(const Operate2 ){std::cout call Operate2(const Operate2 ) \t this std::endl;}~Operate2(){std::cout call ~Operate2() \t this std::endl;}Operate2* operator (int v){std::cout call operator \t this std::endl;Operate2 *tmp new Operate2;tmp-value value v;return tmp;}// 设置value值void setValue(const int v){ value v; }// 获取value值int getValue()const { return value; }private:int value 10; };void unique_operate2() {// 进入一次Operate2构造(ptr1)std::unique_ptrOperate2 ptr1 std::make_uniqueOperate2();/******************** 成员操作 ********************/// 测试std::cout print ptr1 ptr add: ptr1 std::endl std::endl;// 测试 -std::cout print ptr2 - value is: ptr1-getValue() std::endl;ptr1-setValue(20);std::cout print ptr2 - value is: ptr1-getValue() std::endl std::endl;// 测试 get :返回指向所管理对象的裸指针Operate2 *tOperate2Ptr ptr1.get();std::cout tOperate2Ptr - value is: ptr1-getValue() std::endl std::endl;/*测试 reset :该方法可让unique_ptr解除对原始内存管理,也可初始化一个独占的智能指针reset() 解除对原始内存的管理reset(new xxx()) 重新指定智能指针管理的原始内存*/ptr1.reset(new Operate2()); // 新创建的进入一次构造,然后之前的对象进入一次析构std::cout new print ptr2 - value is: ptr1-getValue() std::endl std::endl;// 测试 release :释放对所管理对象的控制权,并返回该指针的裸指针Operate2 *ttOperate2Ptr ptr1.release(); // ptr1被置空if (ttOperate2Ptr) { delete ttOperate2Ptr; }ttOperate2Ptr nullptr;std::cout std::endl;// 测试 swap :交换两个unique_ptr的内容std::unique_ptrOperate2 Operate2_1 std::make_uniqueOperate2(); Operate2_1-setValue(6);std::unique_ptrOperate2 Operate2_2 std::make_uniqueOperate2(); Operate2_2-setValue(9);std::cout Operate2_1: Operate2_1-getValue() Operate2_2: Operate2_1-getValue() std::endl;Operate2_1.swap(Operate2_2);std::cout Operate2_1: Operate2_1-getValue() Operate2_2: Operate2_1-getValue() std::endl;/*********************************************/// 函数结束,进入一次Operate2析构(ptr1) }int main() {// 基本操作2unique_operate2();/*输出为:call Operate2() 0000029218F50140print ptr1 ptr add:0000029218F50140print ptr2 - value is:10print ptr2 - value is:20tOperate2Ptr - value is:20call Operate2() 0000029218F501C0call ~Operate2() 0000029218F50140new print ptr2 - value is:10call ~Operate2() 0000029218F501C0call Operate2() 0000029218F50140call Operate2() 0000029218F501C0Operate2_1:6 Operate2_2:6Operate2_1:9 Operate2_2:9call ~Operate2() 0000029218F50140call ~Operate2() 0000029218F501C0*/return 0; }基本操作3 #include iostreamclass TestClass { public:TestClass(){std::cout call TestClass() \t this std::endl;}TestClass(const TestClass ){std::cout call TestClass(const TestClass ) \t this std::endl;}~TestClass(){std::cout call ~TestClass() \t this std::endl;}TestClass* operator (int v){std::cout call TestClass \t this std::endl;TestClass *tmp new TestClass;tmp-value value v;return tmp;}// 设置value值void setValue(const int v){ value v; }// 获取value值int getValue()const { return value; }private:int value 100; };std::unique_ptrTestClass changeValue_add10(std::unique_ptrTestClass tcPtr) {tcPtr-setValue(tcPtr-getValue() 10);return tcPtr; }void unique_operate3() {std::unique_ptrTestClass tcPtr1 std::make_uniqueTestClass();if (tcPtr1) { std::cout 11111:\t ptr: tcPtr1 *ptr: tcPtr1-getValue() std::endl; }//changeValue_add10(stcPtr1); // 错误:由于unique_ptr不能拷贝,故不得作为形参进行拷贝给实参std::unique_ptrTestClass tcPtr2 changeValue_add10(std::move(tcPtr1));if (tcPtr2) { std::cout 22222:\t ptr: tcPtr2 *ptr: tcPtr2-getValue() std::endl; } }int main() {// 基本操作3unique_operate3();/*输出为:call TestClass() 000001F354580A6011111: ptr:000001F354580A60 *ptr:10022222: ptr:000001F354580A60 *ptr:110call ~TestClass() 000001F354580A60*/return 0; }关注 笔者 - jxd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flash网站特点wordpress速度太慢

es6对象浅复制: 字符串大小比较: 如果是汉字:a.charCodeAt() > b.charCodeAt() //使用carCodeAt将器转为asci码,在进行比较 如果是非汉字的字符串:直接比较或者使用上面的转码比较都可以。 如果是日期比较&#xff…

服装网站建设准备英文注册查询网站

1688商品详情API在跨境电子商务中的重要性 一、引言 随着全球电子商务的迅速发展和普及,跨境电子商务已经成为国际贸易的一种重要形式。1688作为全球最大的B2B电子商务平台之一,不仅为国内商家提供了丰富的商品资源,同时也为跨境商家提供了…

dedecms 做门户网站深圳做网站的公司有哪些

#expect脚本在自动化部署中的具体应用 expect脚本是一个非常好的交互式应用脚本,在自动化部署中,可以使用这个脚本来实现全自动的自动化部署。下面是一些具体的应用案例。 场景一:自动安装mysql 可以使用expect脚本来实现mysql自动安装&…

a站为什么不火了人力外包项目发布平台

实现文件拖拽功能 1、设备 -- 安装增强功能 -- /bin/sh VboxLinuxaddition.run -- reboot 2、设备 -- 拖放 -- 双向 3、虚拟机 -- 设置 -- 存储 -- 控制器:SATA -- 勾选 使用主机输入输出(I\O 缓存) 4、虚拟机硬盘 -- 勾选固态驱动器 转载于…

西安外贸网站建设做英语quiz的网站

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …

合肥企业网站建设公司做棋盘游戏辅助的网站

Jenkins是一个基于Java开发的开源的一种持续集成工具,主要用于环境部署,监控重复性的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。要想使用它,你就必须的先安装,接下来我们就介绍下J…

怎样做o2o网站收银系统一套多少钱

给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! 复习一下ssrf的原理及危害,并且以weblog的ssrf漏洞为案例 漏洞原理 SSRF(Server-side Request Forge, 服务端请求伪造) 通常用于控制web进而…

网站统计有哪些安阳论坛网

1、查看当前语言变量值$ locale2、查看系统内安装的语言$ locale -a3、临时修改语言值$ export LC_ALLen_US.UTF-8$ export LANGUAGEen_US:en$ export LC_ALLzh_CN.UTF-8$ export LC_ALLzh_CN.GB18030$ export LANGUAGEzh_CN:zh:en_US:en4.1、永久修改系统的语言值修改文件/etc…

成都网站建设seo宝安中心有什么好玩的地方

最近特别懒,不想码字,原本写作就很差,更是退化严重。社招和校招面试过很多人,从十年前自己还很弱的时候学着面试,到数百次面试积累之后,面对候选人的时候,我的内心依然有些许紧张,非…

网站制作 流程如何做体育彩票网站

这个问题我其实遇到很久了,目前解决方案是手动注入service,并且把工具类也手动注入。 场景: 在spring中,我们经常会定义工具类来做一些奇怪的事情,我当前是通过定时任务quarz调度工具类,工具类再调servic…

电商网站建设济南建网站鞍山黄殿满

特征选择和稀疏学习 子集搜索与评价 对象都有很多属性来描述,属性也称为特征(feature),用于刻画对象的某一个特性。对一个学习任务而言,有些属性是关键有用的,而有些属性则可能不必要纳入训练数据。对当前学…

湖北省建设厅招骋网站网站开发工程师的要求

一、前言 随着对可再生能源的需求不断增长,太阳能作为一种清洁、可持续的能源形式,受到越来越多的关注和应用。太阳能光板通常固定在一个固定的角度上,这限制了它们对太阳光的接收效率。为了充分利用太阳能资源,提高太阳能光板的…

做外贸怎样打开国外网站企业信用信息查询公示系统年审

元对象系统 元对象系统是一个基于标准C++的扩展,为Qt提供了信号与槽机制、实时类型信息、动态属性系统。 元对象系统的三个基本条件:类必须继承自QObject、类声明Q_OBJECT宏、元对象编译器moc。 Qt元对象编译器(Moc)是Qt框架中的一个重要工具,用于处理Qt特有的元对象系统…

闵行建设机械网站广西响应式网站建设

一、TCP/IP的具体含义: 从字面意思来讲,很多人会认为TCP/IP是指TCP与IP这两种协议。有时确实也可以说是这两种协议,但是大部分情况下所说的是利用IP进行通信时所必须用到的协议群的统称。具体来说IP,ICMP,TCP,UDP,FTP以及HTTP等都属于TCP/IP协…

餐饮网站源码福州网站建设公司哪家比较好

输入:一个没有排序的正数数组nums 输出:在 nums数组中未出现的最小的正整数 规则:数组中的元素可能是负数,也可能重复。要求时间复杂度O(n),空间复杂度O(1)。 分析:题目其实很简单,遍历一次放入…

制作企业网站需要注意的事项WordPress又拍云联盟代码

文章目录 前言dequedeque底层设计迭代器设计 priority仿函数数组中的第k个最大元素优先级队列模拟实现pushpop调整仿函数存储自定义类型 前言 今天要介绍比较特殊的结构,双端队列。 还有一个适配器,优先级队列。 deque 栈的默认容器用了一个deque的东西…

织梦做旅游网站成都网站建设龙兵

作者:周小白 【TechWeb】10 月 19 日消息,今日,腾讯云首次对外公布了“小程序云开发十大优秀实践”,包括白鹭引擎、千墨科技、腾讯新闻、即速应用、微盟、唯品会、猫眼、香格里拉、微信读书、微信支付等,涉及多个行业。…

网站建设公司主要完整网站模板下载

一 三层交换机 1 三层交换机概述 三层交换二层交换三层转发 2 虚拟接口概述 在三层交换机上配置的VLAN接口为虚拟接口,使用Vlanif(VLAN虚拟接口)实现VLAN间路由,VLAN接口的引入使得应用更加灵活 三层交换机VLAN间通信的转发…

php免费网站源码做网站排名步骤

Eric Evans 的领域驱动设计是对软件设计领域的一次重新审视,是在面向对象语言大行其道时对数据建模的“拨乱反正”。Eric 强调了模型的重要性,例如他在书中总结了模型在领域驱动设计中的作用包括: 模型和设计的核心互相影响模型是团队所有成…

做企业网站需要建多大的画布网站制作周期

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖,改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP(mybatisplus)的分页插件 二、使…