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.pswp.cn/news/534308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534308.shtml
英文地址,請注明出處:http://en.pswp.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位河北合作伙伴到場參會,共同探討智能時代帶來的多重挑戰和迎戰機遇。“聯想智慧中國行”是聯想致力于推動中國行業智能化升級舉辦的系列活動&…

軟件工程(總體設計②設計原理)

設計原理 模塊化 模塊是由邊界元素限定的相鄰程序元素的序列,而且有一個總體標識符代表它。 按照模塊的定義,過程、函數、子程序和宏,都可作為模塊。 面向對象方法學中的對象是模塊,對象內的方法也是模塊。模塊是構成程序的基…