對於使用new動態配置的資源,在不使用時必須記得delete,以釋放記憶體空間,然而動態記憶體配置很容易發生忘了delete,或是對同一個記憶體位址delete兩次(例如一個物件被指定給兩個指標),或是對一個已經被delete的位址再作讀寫動作。

C++標準函式庫中提供auto_ptr,可以協助您動態管理new而建立的物件,要使用auto_ptr,您要含入memory表頭檔,例如:

#include<memory>

auto_ptr可以指向一個以new建立的物件,當auto_ptr的生命週期結束後,所指向的物件之資源也會被釋放,在建立auto_ptr時必須指定目標物件之型態,例如:

auto_ptr<int>iPtr (new int(100));
auto_ptr<string>sPtr (new string("caterpillar"));

操作auto_ptr就像操作沒有使用auto_ptr的指標一樣,例如:

cout<< *iPtr<< endl; // 顯示100
if(sPtr->empty())
    cout << "字串為空" <<endl;

您也可以建立一個未指向任何物件的auto_ptr,例如:

auto_ptr<int>iPtr;

未指向任何物件的auto_ptr不可以取值,否則會發生不可預期之結果,既然不可取值,如何判斷它是否有指向物件呢?您可以使用get()函式,它會傳回所指向物件的位址,如果傳回0,表示不指向任何物件,如果不指向任何物件,您可以使用reset()來讓它指向一個物件,例如:

if(iPtr.get()== 0) {
  iPtr.reset(new int(100));
}

reset()可以接受一個指標或是0表示不指向任何物件,reset()會先delete目前指向的物件,然後重新指向新的物件,您也可以使用release()釋放auto_ptr管理所指向物件的職責。

auto_ptr可以使用另一個auto_ptr來建立,這會造成所有權的轉移,例如:

auto_ptr<SafeArray>ptr1(new SafeArray(19));
auto_ptr<SafeArray>ptr2(ptr1);

當使用ptr1來建立ptr2時,ptr1不再對所指向物件的資源釋放負責,職責交給了ptr2,在使用指定運算時,也有類似的行為,例如:

auto_ptr<SafeArray>ptr1(new SafeArray(19));
auto_ptr<SafeArray>ptr2(new SafeArray(20));
ptr2= ptr1;

ptr2所指向的物件會先被delete,然後ptr1的屬性會複製至ptr2,也就是ptr1所指向的物件,現在由ptr2指向它了,ptr1不再負責所指向物件的資源釋放。

auto_ptr的資源維護動作是以inline的方式來完成,也就是在編譯時會被擴展開來,所以使用auto_ptr並不會犧牲效率。

最後要注意的是,auto_ptr不能用來管理動態配置而來的陣列,如果用它來管理動態配置而來的陣列,結果是不可預期的。

auto_ptr自动资源管理器相关推荐

  1. “解决方案资源管理器”中不能自动选择正在编辑的文档

    本来正在编辑的文档应该在"解决方案资源管理器"中自动选中的,但是我的VS2005机器好像没有这个功能,后来发现 "工具->选贤"里边的"项目和解 ...

  2. Win11系统资源管理器自动重启怎么办

    Win11系统是目前非常受欢迎的电脑操作系统,很多用户都想升级体验,当我们在使用Win11系统的时候,经常会打开资源管理器来对文件夹进行操作等,不过有时候可能会遇到资源管理器自动重启的问题,这该如何解 ...

  3. WIN7 WIN10 资源管理器不能自动刷新的解决方法

    WIN7 和 WIN10资源管理器偶尔不能自动刷新 具体现象为: 1.新建文件夹或文件后,不能立即显示出新建的文件,必须右击刷新或者按F5刷新资源管理器才能显示出新建的文件 2.删除文件或文件夹后,由 ...

  4. Win7资源管理器自动展开左侧文件夹如何设置

    我们在使用资源管理器时,通常需要一步一步的展开文件夹.那么,有没有更加便捷的方法呢?其实是有的,快看看下面的设置方法吧. 设置方法: 1.在桌面按下"WIN+E"组合键启动资源管理 ...

  5. 清除windows文件资源管理器FTP自动登录状态

    在Windows的文件资源管理器登录FTP,设置保存密码自动登录,这样在下次登录就免去了输入密码的步骤,很方便. 但是想换另一个FTP账号登录,由于之前的保密了账号密码,会自动登录到之前的账号,不会出 ...

  6. Windows 10资源管理器经常无故自动重启

    问题描述 笔者使用的是Windows 10 专业版,之前有过一段时间在系统(软件)更新后出现资源管理器经常无故自动重启,表现为偶尔右键点击时,整个任务栏和桌面图标会消失,几秒之后再重新加载. 解决方案 ...

  7. win10资源管理器一直自动重启,桌面和任务栏不断刷新,无法操作

    今天电脑忽然崩溃了,重启以后桌面及任务栏就一直在刷新,无法进行任何的操作,就搜了下修复方法,记录一下,亲测可用. 搜到的方法是下面这样的: 1.右键点击任务栏上的Windows图标,选择[Micros ...

  8. elementui如何在input 框中搜索_在 Windows 10 中的文件资源管理器中删除搜索历史记录...

    Windows 资源管理器带有搜索功能,用户可以通过该功能找到特定的文件或文件夹.默认情况下,您在搜索框中进行的所有搜索都会保存到其历史记录中.下次您在搜索框中输入内容时,它将在下拉对话框中显示最近输 ...

  9. 资源管理器方法访问FTP服务

    老方最近换了工作,做了乙方的项目经理,但技术实施的活也是要做的哈. 说话,最近在一个部队做项目,项目之外,协助他们建立了一个FTP服务器,权限什么的设置凭着老方的通天晓地(板砖,你慢慢的拍)的能耐,很 ...

  10. 简单的Windows资源管理器——Java版本

    一直有很多小伙伴私信我要社团管理系统的源码,这个暂时无法分享,根据社团管理系统文章的思路完全是可以自己写出来的哦~ 最近一个小伙伴私聊我需要一个java小程序,现将之前写的一个Windows资源管理器 ...

最新文章

  1. 重磅发布 | 30+ 阿里巴巴云原生「顶流」,给你一堂《云原生技术实践公开课》
  2. js代码计算济南出租车打车费用
  3. 如何在 Dapper.NET 中使用事务?
  4. php querystring使用,node.js中的querystring.parse方法使用说明_node.js
  5. js for foreach 快慢_js基本搜索算法实现与170万条数据下的性能测试
  6. 微信独立精彩互换抢红包系统源码ThinkPHP开源版
  7. python高清大图代码_python2的代码从吉卜力网页上下载高清图片
  8. less 使用小结!笔记!
  9. 如何锁定计算机桌面图标,解决win7、win10系统怎么锁定电脑桌面图标
  10. 双色球历史数据下载最新2003年2021年
  11. CS229与《统计学习方法》的EM算法理解和比较,收敛性证明
  12. 密歇根大学张阳团队开发全球首个蛋白质和RNA分子通用结构比对算法
  13. C++学习笔记-STL
  14. matlab如何画波特图,matlab画波特图
  15. WinDbg 常用指令
  16. APC型光纤活动连接器有何特点?适合使用在什么场景?
  17. 浅谈Fiddler4 如何进行Idea抓包操作
  18. R语言:优雅、卓越的统计分析及绘图环境
  19. 马云:刚来公司不到一年的人,谁提…
  20. 数字图像处理之校园交通标志检测与识别

热门文章

  1. H3C 路由备份与IP聚合
  2. 游戏开发之C++多继承及虚继承(C++基础)
  3. Redis详解(二)——Redis基本操作
  4. Linux Apache服务详解——用户个人主页实战
  5. Linux RPM软件包管理
  6. 静态路由的设置以及缺省路由的发布
  7. 中国制造业加速拥抱云计算 产业规模达1500亿
  8. 文本主题模型之LDA(二) LDA求解之Gibbs采样算法
  9. Linux 权限设置
  10. JAVA IO - 高效读取大文件的后几行