C++auto_ptr的用法

2023-11-02

一、auto_ptr是什么?

auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者。当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有的动态内存自动释放。即使发生异常,通过异常的栈展开过程也能将动态内存释放。auto_ptr不支持new 数组。

二、auto_ptr需要包含的头文件?

#include <memory>

三、auto_ptr用法:

auto_ptr<类型〉变量名(new类型)
例如:

auto_ptr<string> str(new string("我要成为大牛"));

尖括号里面的string用了初始化它的模板成员_Ty的类型。那么这里面,只要auto_ptr对象存在,它指向的字符串就存在,同理,如果auto_ptr对象不存在,会利用auto_ptr类中的析构函数自动销毁它所指向的字符串,也就避免了内存泄露。

auto_ptr是C++98标准库中的智能指针模板类 ,在C++11已经被废除, 可以用unique_ptr取代,功能上是相同的,unique_ptr较auto_ptr 而言,提升了安全性(没有浅拷贝),增加了特性(delete析构)和对数组的支持。

常用成员函数:

get函数:
返回智能指针指向对象的指针.
reset函数:
reset重置智能指针托管的内存地址,如果地址不一致,原来的会被析构掉
realease函数:
realease实现的功能就是将原智能指针的控制权取消,不释放原始指针.

使用建议:

1.尽可能不要将auto_ptr变量定义为全局变量或指针
2.除非自己知道后果,不要把auto_ptr智能指针赋值给同类型的另外一个智能指针
3.auto_ptr不支持容器。
4.auto_ptr的析构函数调用的是delete不是delete [],所以不能使用智能指针数组。
判断一个auto_ptr是否为空不能使用if(ptest == NULL),应该使用if(ptest.get() == NULL)

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

C++auto_ptr的用法 的相关文章

随机推荐

  • vi笔记2——vi之简单编辑

    vi笔记2 vi之简单编辑 vi 简单编辑主要包含以下内容 Moving the cursor Adding and changing text Deleting moving and copying text More ways to e
  • 华三H3C交换机如何配置堆叠irf虚拟化(未配置检测机制)

    华三交换机如何配置堆叠irf IRF Intelligent Resilient Framework 智能弹性架构 是华三的软件虚拟化技术 将一台以上的交换机组合起来共同工作 能提供尽可能多的端口 多台交换机经过配置后可看成为一个虚拟的一体
  • 解析复杂的json数组嵌套

    chanNameList channelName 通道1 enable 1 perX 0 perY 0 rgbaBG 00000000 rgbaFont 00000000 channel 1 ip 192 168 121 13 status
  • JDK8的下载和安装,以及配置环境变量

    一 JDK的下载 https www oracle com java technologies downloads 1 进入JDK下载页面 2 进入下载页面 3 下载 二 JDK的安装 1 双击安装包 进入安装界面 直接点击下一步 2 选择
  • 综述---图像处理中的注意力机制

    重磅好文 微软亚研 对深度神经网络中空间注意力机制的经验性研究 论文 An Empirical Study of Spatial Attention Mechanisms in Deep Networks 高效Transformer层出不穷
  • Android MPAndroidChart使用,X轴标签自定义显示,坐标显示不全,换行显示

    一 自定义显示 XAxis xAxis chart getXAxis 获取设置X轴 ValueFormatter valueFormatter new ValueFormatter private final String xLableLi
  • 论文写作专题记录

    本文笔记来自20200317智源AI的分享 一 论文写作小白的成长之路 用理论支撑你 唉 你的这个研究确实是很有用 每个理论的后面可能都要有一个解释 即使别人不懂你这个理论 但是他也能理解这个事情 那么我们总结一下以往的工作是怎样的 所以我
  • react native js中调用native中的方法

    react native js中调用native中的方法 这里主要涉及到几个类 java ul li Base class for Catalyst native modules that require access to the lin
  • 【笔记】A simple yet effective baseline for 3d human pose estimation

    论文 https arxiv org abs 1705 03098v2 pytorch 本文代码参考 weigq 3d pose baseline pytorch A simple baseline for 3d human pose es
  • 外部中断EXTI

    项目场景 STM32外部中断 EXTI10 15 中断线挂起无法清除问题 问题描述 按键为PD14 输入模式 外部中断 进中断服务函数处理完后仍再次进入中断服务函数 无法退出 中断服务函数已加入清除中断线函数 检查引脚配置 输入模式 RCC
  • Javav中危险字符过滤工具类

    在进行网站开发时 为了避免网站遭到SQL语句的注入式攻击 应该考虑到过滤字符串中的危险字符 在该实例中 可以过滤 lt gt 等字符时 在处理页面中会把这些字符过滤掉 该示例主要利用String的replaceAll方法 public St
  • [spark]计算商品相似度

    一 商品相似度定义 基于物品的协同过滤算法是业界应用最多的算法 它的思想是给用户推荐那些和他们喜欢的物品相似的物品 主要分为两个步骤 一 计算物品之间的相似度 二 根据物品相似度和用户的历史行为给用户生成推荐列表 物品i和物品j的相似度可定
  • 创建工程文件(完整流程)

    创建并完成一个简单的工程的流程 添加文件 创建文件 此时 文件就添加完毕了 设置字体 设置Table的空格字数为4个 书写代码 拷贝的正点原子的例程 点击综合 生成设计后的原理图 第一种方法 进行I O引脚的分配 需要查看电路板的原理图分配
  • 【SSD-Caffe】安装使用教程

    1 下载镜像 参考我的另一篇博客 docker使用教程 我下载的是 docker pull bvlc caffe gpu 这个镜像 2 安装ssd caffe 下载之后这并不是ssd caffe 的环境 是较为原始版本的环境 所以还需要安装
  • 抓取iframe内数据(C#)

    当时企图抓取这iframe数据还费了不少劲 早就想记录下来 但是由于自身懒得让人惊叹 结果一直拖到现在 需求是要获取到一些网站上的大批数据 这些数据都是分很多页的 最初思路就是用web程序一页一页抓取 保存到Excel中 通常情况下用以下代
  • 5大指标:评估RPA项目的ROI,实现投资回报最大化

    ROI 投资回报率 通常是RPA项目中的一个关键指标 在企业步入自动化的早期阶段 关注RPA的投资回报率非常重要 这将影响到一个RPA项目是否值得去做 对企业运营者 尤其是COO 首席运营官 而言 RPA若实施得当 将为企业降本增效带来无与
  • 机器学习苹果识别——python+opencv实现物体特征提取

    以水果为例 要用机器学习来实现水果识别 无论是训练还是识别阶段都需要提取图片中水果的特征值 本篇将讲述如何提取水果的周长 面积 颜色 长度 宽度7个特征值 cv findContours cv findContours将图片中识别到的轮廓返
  • 如何用matlab去修改图像尺寸

    img imread test1 jpg 这里为原始图像 i imresize img 567 390 imwrite i 1 jpg 这里为修改后图像 imread imresize和imwrite 1 imread 读取图像信息 A i
  • 查看VSCode版本

    背景 想要查看一下visual studio code的版本 方法 在vscode菜单栏 帮助 gt 发行说明 Help gt Release Notes 版本为1 36
  • C++auto_ptr的用法

    文章目录 一 auto ptr是什么 二 auto ptr需要包含的头文件 三 auto ptr用法 一 auto ptr是什么 auto ptr 是C 标准库提供的类模板 auto ptr对象通过初始化指向由new创建的动态内存 它是这块