C++ auto_ptr智能指针

C++:智能指针(1)——auto_ptr, unique_ptr的区别 正在上传…重新上传取消 auto_ptr, unique_ptr 首先看一段代码 #include <iostream> #include <type_traits> #include <vector> #include <memory> #include <exception> using namespace std; int... 阅读详情

STL 还提供了另一个模板类:auto_ptr 类。该类主要用于管理动态内存分配。

如果使用 new() 函数分配堆中的内存,而又不记得回收这部分内存,会导致内存泄漏。因此必须使用 delete 语句释放该内存块。即使在函数末端添加了 delete 语句释放内存,还需要在任何跳出该函数的语句(如抛出异常)之前添加释放内存的处理,例如 goto 语句和 throw 语句。

auto_ptr 模板定义了类似指针的对象,将 new 获得的地址赋给该对象。当 auto_ptr 对象过期时,析构函数将使用 delete 来释放内存。如果将 new 返回的地址赋值给 auto_ptr 对象,无须记住还需要释放这些内存。在 auto_ptr 对象过期时,内存将自动被释放。

在 C++ 语言中,要使用 STL 中的 auto_ptr 对象,必须包含头文件 <memory>,该文件包括 auto_ptr 模板。使用通常的模板句法来实例化所需类型的指针。auto_ptr 构造函数是显式的,不存在从指针到 auto_ptr 对象的隐式类型转换。

auto_ptr <double> pd;
double *p_reg = new double;
pd = p_reg; // 不允许
pd = auto_ptr <double> (p_reg); //允许
auto_ptr <double> panto =p_reg; //不允许
auto_ptr <double> pauto (p_reg); //允许

模板可以通过构造函数将 auto_ptr 对象初始化为一个常规指针。auto_ptr 是一个智能指针,但其特性远比指针要多。值得注意的是,在使用 auto_ptr 时,只能配对使用 new 和 delete。

提示,只能对 new 分配的内存使用 auto_ptr 对象,不要对由 new() 分配的或通过声明变量分配的内存使用它。

总结

C++ 库中的 auto_ptr 对象是一种智能指针。智能指针是一种类,即其对象的特征结类似于指针。智能指针存储 new 分配的内存地址,也可以被解除引用。

智能指针是一个类对象,可以修改和扩充简单指针的行为。智能指针可以建立引用计数,这使得多个对象可共享由智能指针跟踪的同一个值。当使用该值的对象数为 0 时,智能指针将删除该值。

智能指针可以提高内存的使用效率,帮助防止内存泄露。

python123题目——个税计算器 类型:简单分支。 阅读详情

相关推荐

PTA 7-8 暴力小学(二年级篇)-求出4个数字 (10分)java

PTA 7-8 暴力小学(二年级篇)-求出4个数字 (10分)java 小博是新城小学二年级学生,这孩子人很老实,数学、语文成绩都是中等。不过一旦坐在电脑前,写起代码来,则有些霸气侧漏,尤其擅长各种暴力方法。本题就是数学莫老师的题目之一,请你和小博一起暴力求解吧。 输入格式: 第一行给出这个和N(图中例子的和N为2000)。 输出格式: 第一行输出所有解的数目K,随后K行按照DCBA 4位数字从...

qryzhfj的博客 2188

【C++】智能指针详解

今天我们来讲一下c++11中的智能指针。

就爱摆烂 1万+

cesium加载天地图、OSM、谷歌底图

以上示例是加载矢量底图,若要加载影像或者其他只需要更换相应的url,在WebMapTileServiceImageryProvider中还要更改layer参数。url中’‘vec_w’,一些其他风格,基于CRAT渲染,两种方法效果差别不大。有两种方法加载天地图分别是。对应投影样式,具体可看。还要谷歌的一些卫星底图。

qq_44897914的博客 3000

c++智能指针(2) -- auto_ptr

auto_ptr 名称(new 空间),// 类型: 智能指针指向的类型,空间:智能指针管理的空间// 创建一个p1的智能指针对象,其指向int类型的数据,动态开辟一个int类型的空间作为参数(其内部的指针会指向这片空间)// 创建一个空对象,指向int类型的数据,其内部的指针会指向NULL。

weixin_68026222的博客 1328

细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,废话不多说。    我的应用场景:    项目系统使用oracle数据库,与客户的第三方系统供应商实现资源共享,对方为sql server数据库;    我的测试开发环境为64bitwin7PC机,本机上装有64位Oracl...

xueren_83的博客 1万+

【网络图】:附Origin详细画图教程

网络图,是一种由节点(或顶点)和连接这些节点的边(或链路)组成的图形结构。在网络图中,节点通常代表系统中的一个实体(如项目中的一项任务、通信网络中的一个设备、或运输网络中的一个站点),而边则代表这些实体之间的直接联系或流动(如任务的先后顺序、数据的传输路径、或乘客的旅行路线)。 有向图:如果边具有方向性,即从一个节点指向另一个节点,则称为有向图。这种图常用于表示具有明确先后顺序或方向性的系统,如项目管理中的任务依赖关系。 无向图:如果图中的边没有方向,则称为无向图。它适用于表示实体间相互关联但无明确方向性的

weixin_50236590的博客 3955

C++智能指针auto_ptr

简单来说,智能指针是一个自定义的类型,智能指针对象中包含一个指针,此指针指向动态开辟的空间,在智能指针对象离开作用域后,析构函数会自动调用删除器(Deleter,auto_ptr不具备删除器),释放所申请的资源。这种设计思想来源于RAII(Resource acquisition is initialization),它充分利用了C++语言局部对象自动销毁的特性来控制资源的生命周期。

Singularitys123的博客 420

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1783

C++之智能指针auto_ptr

当你在读这篇文章的时候,应该都有这样一个疑问?那就是为什么要使用智能指针。 我们先看这样一个示例: #include <iostream> #include <string> #include <exception> using std::string; void memory_demo1() { string* str = new string("今天又找了一天的bug,太累了!!!"); std::cout << *str

DYDlove的博客 1905

仿真学习系列(二):ADS仿真直观理解方波与频谱分量的关系

在高速电路设计中,我们常常听到一句话:“信号其实不是电压在传输,而是频率在传播。” 这句话看似抽象,却揭示了信号世界的核心本质——任何时域波形,都可以被拆解为一系列不同频率的正弦波。 那么,一个看似简单的方波,究竟由哪些频率成分组成?为什么在示波器上,有的方波上升沿又快又“方”,而有的却“圆润”得多?这些差异背后,隐藏的正是高频分量的力量。 本文将通过使用 Keysight ADS,从零搭建仿真电路,直观地观察方波与其谐波成分之间的关系。

案例文章,高速信号 814

MATLAB极坐标伪彩色圆图绘制之polarPcolor函数

polarPcolor函数介绍 我们经常在论文或期刊上看到如下图这种以色调冷暖代表数值大小的极坐标圆图, 而function [varargout] = polarPcolor(R,theta,Z,varargin)可以很好的帮助我们快速绘制这类极坐标圆图。它非常适合雷达或激光雷达的平面位置指示器。使用polarPcolor函数时,我们只需根据手中数据构造相应的二维矩阵Z即可,十分便捷。varargin值为绘制模式选择。R值为半径坐标一维矩阵,theta值为角坐标一维矩阵。 代码示例 这里使用了海洋表面耀光

qq_19512613的博客 1万+

C++ 八、智能指针

智能指针

qq_55753565的博客 903

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++的智能指针auto_ptr、unique_ptr源码解析

C++的智能指针auto_ptr、unqiue_ptr源码解析1、前言2、源码准备3、源码解析3.1、auto_ptr解析3.2、unqiue_ptr解3.3、unqiue_ptr的一个偏特化版本4、智能指针相关内容的总结5、总结 1、前言 本文仅对C++智能指针auto_ptr、unqiue_ptr源码进行解析,需要读者有一定的C++基础并且对智能指针有所了解,本文并不对智能指针的使用方法、使用场景、效率等方面进行阐述分析,这些知识需自行查阅相关书籍去了解。 建议大家先看一下这篇文章《C++11的智能指

游戏行业资深搬砖人员 3426

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【C++入门到精通】智能指针 auto_ptr、unique_ptr简介及C++模拟实现 [ C++入门 ]

这篇文章介绍了 C++ 中的两种智能指针:std::auto_ptr和std::unique_ptr。首先,文章简要介绍了它们的作用和使用示例。然后,对于std::auto_ptr,文章展示了一个简单的模拟实现,解释了每个函数的作用和实现原理。接着,文章介绍了更为严格的 std::unique_ptr,包括其特点、使用示例和模拟实现。对于模拟实现,文章详细解释了如何防止拷贝和赋值,并提供了两种不同的思路。整篇文章内容清晰明了,对于想要学习 C++ 动态内存管理的读者具有很好的参考价值。

Yawesh的博客 2727

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C++】智能指针——auto_ptr,unique_ptr,shared_ptr

1.智能指针对象中引用计数是多个智能指针对象共享的,两个线程中智能指针的引用计数同时 ++或--,这个操作不是原子的,引用计数原来是1,++了两次,可能还是2.这样引用计数就错 乱了。旧的智能指针的会转移给新的智能指针,而旧的智能指针的会被置空。解决方案:在引用计数的场景下,把节点中的_prev和_next改成weak_ptr就可以了,weak_ptr不会增加引用计数,代码示意。该问题是有类似于链表节点的结构引起的,当外部的智能指针都释放了,就拿不内部的智能指针,那么节点就不会释放。使用方法参考官方文档。

2301_79796701的博客 1842

C++智能指针的使用,auto_ptr,unique_ptr,shared_ptr,weak_ptr详解

C++智能指针的用法,auto_ptr,unique_ptr,shared_ptr,weak_ptr

liu20000505的博客 2313

C++智能指针auto_ptr、unique_ptr、shared_ptr、weak_prt详解

C++智能指针auto_ptr、unique_ptr、shared_ptr、weak_prt详解

GodFishhh的博客 2468

cpp11新特性之智能指针(上):关于auto_ptr的一切

今天,我想和大家讨论一个已被淘汰的智能指针——auto_ptr。我们将从它的使用方法、内部源码分析、存在的缺陷,到常见的陷阱几个方面进行深入探讨,以彻底把握智能指针的核心逻辑。这不仅为我们后续学习 shared_ptr、unique_ptr 以及 weak_ptr 打下了坚实的基础,而且通过理解其需求和不足,我们能更加深刻地体会智能指针设计背后的理念,使得我们在使用它们时更加得心应手。

大龄工科菜鸡的cpp修行之路 2301

C++ auto_ptr智能指针的用法

C++ auto_ptr智能指针的用法

愤怒的小狐狸----博客专栏 3万+

C++ 智能指针的原理:auto_ptr、unique_ptr、shared_ptr、weak_ptr

介绍C++的智能指针:auto_ptr、unique_ptr、shared_ptr、weak_ptr。介绍了每种智能指针的作用和特点,以及它们的实现原理,同时介绍了shared_ptr的循环引用的问题,以及如何解决循环引用。

weixin_57761086的博客 2523

C++ 浅谈之智能指针 auto_ptr 和 unique_ptr 对比

智能指针 auto_ptr 和 unique_ptr 对比

优质后端技术知识记录 821

C++智能指针——auto_ptr详解

前言 从之前智能指针的介绍中可以了解到智能指针主要作用是管理内存,避免内存泄漏和悬垂指针。 之前介绍的不管是智能指针与引用计数详解还是智能指针与句柄详解,其核心就是通过一个类来管理被new出来的对象,具体的技术就是靠引用计数。 auto_ptr介绍 auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。该智能指针已...

yj_android_develop的博客 1万+

【c++】智能指针(auto_ptr, unique_ptr, shared_ptr, weak_ptr)

前言 一、为什么需要智能指针 二、智能指针 RAII 像指针一样使用 三、auto_ptr 概念讲解 模拟实现 测试 四、unique_ptr 概念讲解 模拟实现 测试 五、shared_ptr 概念讲解 模拟实现 测试 六、shared_ptr的循环引用 场景引入 如何解决循环引用问题 七、weak_ptr 概念讲解 模拟实现 测试 八、shared_ptr的定制删除器 概念讲解 模拟实现 测试一 测试二 测试三 测试四 九、智能指针的总结 十、内存泄漏 概念讲解 内存泄漏分类 如何检测内存泄漏 如何避免

重铸自身根基的博客 1622

C++的auto_ptr智能指针:从诞生到被弃用的历程

C++作为一种功能强大的编程语言,为开发者提供了众多便捷的特性和工具,其中智能指针是其重要特性之一。智能指针能够自动管理内存,有效避免内存泄漏等常见问题。然而,并非所有智能指针都尽善尽美,auto_ptr便是其中的一个例子。本文将深入剖析auto_ptr的诞生、发展以及最终被弃用和移除的历程,帮助你更好地理解这一智能指针的兴衰史。在C++98标准中,auto_ptr作为标准库的一部分首次亮相。当时,C++的内存管理主要依赖于开发者手动调用new和delete。

码事漫谈 1635

【C++】三种智能指针(auto_ptr,unique_ptr,shared_ptr)

c++中的智能指针主要是基于RAII思想的。 不懂RAII思想的同学可以看看这篇博文-->RAII思想---利用对象生命周期来控制程序资源 智能指针的两大要素 RAII思想:把资源交给这个对象管理 像指针一样的行为(重载operator*和operator->) template<class T> class SmartPtr { public://交给对...

Miss_Monster的博客 2235

C++:智能指针:auto_ptr(C++98),unique_ptr,shared_ptr以及weak_ptr(C++11)

我们知道,new在开辟空间失败时会抛出异常,如果在开辟arry1空间时没有异常,但是开辟arry2空间时抛出了异常。则会导致arry1资源没有被释放,资源泄露。如果要解决这种问题,我们则需要使用智能指针。 RAII是Resource Acquisition Is Initialization的缩写,他是一种管理资源的类的设计思想,本质是一种利用对象生命周期来管理获取到的动态资源,避免资源泄漏,这里的资源可以是内存、文件指针、网络连接、互斥锁等等

xiuwoaiailixiya的博客 1086
上一篇: vs2013下配置opengl及简单例程
下一篇: c++ list, vector, map, set 区别与用法比较
11小猪会飞11
博客等级 码龄10年 210粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值