避免资源泄露的一个方法

1、一个资源,很多人用,如果大家都不delete,必定造成资源泄露

2、如果多个人进行delete,必定导致未定义行为。

3、因此,只能有一个delete,而且必须是最后一个使用者进行delete。

4、那么问题来了,我怎么知道谁是最后一个使用者?在多线程的环境中更加不可能判断出来。那怎么办呢?

5、不要想着谁是最后一个使用者,换个角度,每个使用者使用前都进行addRef,使用后都进行release,这样就保证了最后一个使用才进行delete。

避免资源泄露的一个方法,布布扣,bubuko.com

时间: 2024-10-05 15:19:09

避免资源泄露的一个方法的相关文章

接口测试基础知识详解http请求由三部分组成,分别是:请求行、消息报头、请求正文 1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了

HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path]http表示要通过HTTP协议来定位网络资源:host表示合法的Internet主机域名或者IP地址:port指定一个端口号,为空则使用缺省端口80:abs_path指定请求资源的URI:如果URL中没有给出abs_path,那么当它作为请求URI时,必须以"/"的形式给出,通常这个工作浏览器自动帮我们完成.e

如何检测资源泄露

Window上我们常见的资源泄露包括内存和对象句柄泄露, 下面讨论下对各类泄露的检测方法. 关于内存泄漏,我以前写过2篇文章: C++中基于Crt的内存泄漏检测, 基于WinDbg的内存泄漏分析 用上面提到的方法检测泄露很多时候太麻烦,所以有时候我们会考虑用工具 VLD: Visual Leak Detector源于Code Project:Visual Leak Detector - Enhanced Memory Leak Detection for Visual C++, 安装包可以到 这

关于操作DC时的资源泄露

首先应明确一个概念 句柄, 关于句柄的详细介绍请见这里 对于句柄的使用小结:借来的要归还,创建的要释放,选出的要选入[尤其是针对GDI的一些句柄而言,如HPEN,HBRUSH等] 1. 使用GetDC() 获取的设备上下文指针在不使用的时候必须调用ReleaseDC()进行释放 例如: 1 CDC *pDC = GetDlgItem(IDC_TEST)->GetDC(); 2 3 /*...............*/ 4 5 GetDlgItem(IDC_TEST)->ReleaseDC(p

(二)线程同步_1---同步一个方法

同步一个方法(Synchronizing a method) 在并发编程中,最常见的情景莫过于多线程共享同一资源的情景了,例如多个线程同时读写相同的数据或者同时访问相同的文件或数据库连接,如果不采取一个控制机制,那么就会造成数据的不一致甚至是错误发生: 为了解决这些问题,引入了临界区域(critical section)的概念,一个临界区域是指一个用来控制资源访问的代码块,以保证被访问的资源不会同时被多个线程访问,从而保证了数据的一致性: java中提供了Synchronization机制,当一

[转]在Arcmap中加载互联网地图资源的4种方法

转自http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981 前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误,希望大家多多指教.4种方法如下: a)        如果地图支持OGC(开放地理空间信息联盟)协议的话,可以通过WMS,WMTS服务资源在Arcmap中打开,如天地图等. b)        通过相关插件打开

在Arcmap中加载互联网地图资源的4种方法

前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误,希望大家多多指教.4种方法如下: a)        如果地图支持OGC(开放地理空间信息联盟)协议的话,可以通过WMS,WMTS服务资源在Arcmap中打开,如天地图等. b)        通过相关插件打开.如使用ArcBruTile插件等可以在arcmap中打开如Google map,openstreet,必应地图,百度地图等. c) 

VC++中复制对话框资源 之较好方法之一

资源对话框的编写有时候较为麻烦,这里我成功实现了这个方法的可用性,具体如下: 碰到模块移植问题了,自己做的对话框类(继承于CDialog)要移植到目标工程中.在网上搜了几个帖子发现都说的很生涩. 问题:把一个MFC SDI工程中的一个对话框资源和类拷贝到另一个MFC SDI中. 1.在VC2012中打开老的工程,在工作区Resource标签页中选中Dialog文件夹下的资源文件(就是双击后会出现编辑窗口界面的那个东西),按Ctrl+C(Edit->Copy也一样). 2.关闭当前工程,注意不要关

wpf资源嵌套,一个资源引用另外一个资源,被引用的资源应该声明在前面

在wpf的XAML的Window.Resources中,一个资源引用另外一个资源,出现如下错误: “错误 1 “{DependencyProperty.UnsetValue}”不是 Setter 上“System.Windows.FrameworkElement.FocusVisualStyle”属性的有效值”. 如下图: 虽然错误列表里出现如图的错误,但是程序缺依然可以运行,只是在设计器里看不了UI视图(界面). 出现这个错误的原因是: 被引用的资源的声明在引用它的资源的后面了(或者是没有声明

如何解决内存泄露:笨方法手动调试

上篇文章介绍了内存泄露以及避免方法,本篇文章介绍当内存泄露发生时,如何解决 1. 笨方法手动调试 1 检查代码是否每一个new.malloc 都有对应的 delete.free 2 观察有哪些可能分配内存和释放内存的代码,在其上下添加断点,以debug模式运行 3 打开任务管理器,查看调试程序的内存占用, 4 逐个排除: - 看运行哪些语句时内存占用增加 - 看运行释放内存语句后,内存占用是否减少 - 查看释放后的内存是否仍然存在 5 针对第4步找出内存释放失败的语句,通过查看内存的详细信息,逐