c++ file* 句柄泄漏_C++核心指南:P.8 勿泄漏任务资源

b145a4f24dc6c362200b72f935a09ed9.png

P.8: 勿泄漏任务资源

原因

随着时间的推移,即使是资源的缓慢增长也会耗尽这些资源的可用性,这对于长时间运行的程序特别重要,但也是负责任的编程行为的基本部分。

糟糕的例子

void f(char* name){ FILE* input = fopen(name, "r"); // ... if (something) return; // 糟糕:如果 something == true,文件句柄就泄漏了 // ... fclose(input);}

优先使用RAII:

void f(char* name){ ifstream input {name}; // ... if (something) return; // OK: 没有泄漏 // ...}

参考: 资源管理部分

注意

泄漏通俗地说就是“任何没有被清理的东西”,更重要的分类是“任何不能再被清理的东西”。例如,在堆上分配了一个对象,然而丢失了指向该块内存(分配)的指针。 不应将此规则应用在程序关闭期间需返回长生命周期对象的分配(译注:在程序退出期间的内存分配可以不需要遵守这些规则),例如,依赖于系统保证的清理可以简化代码,比如关闭文件和在进程关闭时释放内存。然而,依赖于隐式清理的抽象也同样简单,而且通常更安全。

注意

使用生命周期安全性剖面(profile) 来消除泄漏,当与RAII提供的资源安全相结合时,就没了"垃圾回收"的需求。当使用类型和边界剖面(profiles)时,你可以获得由工具保证的类型和资源安全。

实施

  • 查看指针:将它们分为非所有者(默认)和所有者(owner),在可行的地方,用标准库资源句柄替换所有者(如上面的示例所示),或者使用GSL中的owner来标记所有者。
  • 查看裸用的new和delete
  • 查看已知返回原始指针的资源分配函数(如fopen, malloc 和 strdup)

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

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

相关文章

数据规范化、实体-联系图、状态转换图、层次方框图、Warnier图、IPO图及验证软件需求

数据规范化 软件系统经常使用各种长期保存的信息,这些信息通常以一定方式组织并存储在数据库或文件中,为减少数据冗余,避免出现插入异常或删除异常,简化修改数据的过程,通常需要把数据结构规范化。 通常用“范式(normal forms)”…

python和c混合编程 gil,如何在python中使用C扩展来解决GIL

I want to run a cpu intensive program in Python across multiple cores and am trying to figure out how to write C extensions to do this. Are there any code samples or tutorials on this?解决方案You can already break a Python program into multiple processes.…

Linux基础(iptables与firewalld防火墙)

iptables 在早期的Linux系统中,默认使用的是iptables防火墙管理服务来配置防火墙。尽管新型的fierwalld防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用iptables。 策略与规则链 防火墙会从上至下的顺序来读…

虚拟跳线软件干什么用的_疯狂刷单!用违法软件生成虚拟手机号,“骑手”半年“刷单”牟利60余万,百米内竟有万笔订单 | 申晨间...

来源:新闻晨报 记者:吴艺璇借助违法软件生成虚拟手机号码,利用平台审核漏洞大量注册用户,大量“刷单”骗取平台的返现和购物补贴,半年内疯狂刷1.8万余单,累计牟利60余万元。近日,在市公安局刑侦…

软件工程(总体设计①设计过程)

经过需求分析(https://blog.csdn.net/weixin_45626468/article/details/115324885)阶段的工作,系统必选“做什么”已经清楚了,现在是决定“怎样做”的时候了。 总体设计的基本目的就是回答“概况地说,系统应该如何实现…

ygo游戏王卡组_ACG大科普(7)游戏王

大家是否在小时候接触过一种卡片类似这种的 这就是今天的主角游戏王。 背景 1996年,《游戏王》漫画开始在集英社《周刊少年Jump》连载。 1998年,Bandai推出以《游戏王》原作中登场的集换卡牌游戏“M&W”为题材的集换卡牌。 采用Bandai的卡片自动贩卖…

Qt图形界面编程入门(基本窗口及控件)

基本窗口类QWidget QWidget是所有窗体部件的基类,例如对话框类,主窗体类,以及其他诸如按钮,编辑框,标签等等都是由QWidget派生得到,QWidget拥有的方法往往都可以在其他子类中使用。 窗体的几何尺寸分为包…

背景se_盘点那些RPG手游中主角的背景故事,越悲情越强大

RPG游戏一直以代入感超强的游戏方式来吸引玩家,用超越现实的艺术手段把玩家带入到虚拟的游戏世界,让玩家担任不同的社会角色来去经历不同的虚拟故事,体验多种人生经历,想要扮演任何角色都是有可能的。当然在RPG游戏中也有好坏之分…

TensorFlow构建二维数据拟合模型(2)

变量的定义和使用 变量的定义与初始化 TensorFlow中,变量是一种特殊的张量,其值可以是一个任意类型的形状的张量。 与其他张量不同,变量存在于单个回话调用的上下文之外,主要作用是保存和更新模型中的参数。 声明变量通常使用…

c++用牛顿法开多次根_望远镜的历史之三:大神出世,改变望远镜历史的竟然是牛顿...

上次我们说到格里高利望远镜有点画蛇添足,那么格里高利望远镜添了什么呢?格里高利望远镜格里高利望远镜观测的图像都是正立的,这就意味着要采用多个凹面反射镜,而当时凹面反射镜磨制不易,无论是多大的科学家都要亲自动…

python浮点型精度损失问题_解决float型数据精度损失问题

问题:浮点型数据存储方式会导致数据精度损失,增大计算误差。float fval 0.45;  // 单步调试发现其真实值为:0.449999988double dval 0.45; // 单步调试发现其真实值为:0.45000000000000001当很多个这样的单精度浮点型数据进行…

Linux配置本地yum源(RHEL8)

https://www.cnblogs.com/itwangqiang/p/13391401.html

如何把照片正面变成反面_各国签证照片要求大全 (含模板)

对于不是很熟悉签证的小伙伴来说,面对全球那么多国家的签证而且每张签证照片的规格不同为此我们为您整理了各国签证照片要求大全 东南亚国家的签证照要求基本相同,就以泰国为例,告诉大家签证照的注意事项。“泰国,新加坡&#xff…

TensorFlow实验(3)

模型的保存与恢复 我们来简单实现一下模型的保存与恢复 训练完TensorFlow模型后,可将其保存为文件,以便于预测新数据时直接加载使用。 TensorFlow模型主要包含网络的设计或者图以及已经训练好的网络参数的值。 TensorFlow提供的tf.train.Saver()函数…

ad域 禁用账号_IST-AD域信息同步平台来袭

IST的AD域信息同步系统是能帮助域管理员简化日常的一些管理工作,可以让AD域系统与其他的业务系统进行用户信息同步,实现自动的新旧用户帐户信息的同步修改、组织架构同步调整,并有简单易操作的配置页面系统与操作日志查询等。通过ODBC、Web S…

Linux基础(firewalld防火墙配置管理工具的图形用户界面)

firewall-config的界面如图所示 我们先将当前区域中请求http服务的流量设置为允许,但仅限当前生效。具体配置如图 尝试添加一条防火墙策略规则,使其放行访问8080-8088端口(TCP协议)的流量,并将其设置为永久生效&#x…

ios 请求失败封装_vue_axios请求封装、异常拦截统一处理

1、前端网络请求封装、异常统一处理vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成的异常情况的判断,采用axios请求封装和异常拦截操作;axios 请求封装// 引入axios文件包import axios from axios// POST…

Linux基础(使用ssh服务管理远程主机1)

配置网络参数 使用nmtui命令配置网络参数,以及通过nmcli命令查看网络信息并管理网络会话服务。 执行nmtui命令运行网络配置工具 进入主界面 选中编辑连接并按下回车键 选中要编辑的网卡名称,然后按下Edit(编辑)按钮 把网络IPv4 …

联想g510升级方案_联想智慧中国行,聚焦第一古城,助力企业智能升级

12月29日,联想智慧中国行“一起联想 生态绽放”One Lenovo融合品鉴会邢台站盛大启幕,现场近70位河北合作伙伴到场参会,共同探讨智能时代带来的多重挑战和迎战机遇。“联想智慧中国行”是联想致力于推动中国行业智能化升级举办的系列活动&…

软件工程(总体设计②设计原理)

设计原理 模块化 模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。 按照模块的定义,过程、函数、子程序和宏,都可作为模块。 面向对象方法学中的对象是模块,对象内的方法也是模块。模块是构成程序的基…