91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++為什么在一個表達式中最多只執行一次顯式資源分配

發布時間:2021-11-26 15:14:09 來源:億速云 閱讀:166 作者:iii 欄目:大數據

本篇內容主要講解“C++為什么在一個表達式中最多只執行一次顯式資源分配”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++為什么在一個表達式中最多只執行一次顯式資源分配”吧!

R.13: 在一個表達式中最多只執行一次顯式資源分配

Reason(原因)

如果你在一個表達式中執行兩次(或以上的)資源分配,由于包括函數參數在內的子表達式的執行順序是沒有定義的,因此可能導致資源泄露。

Example(示例)

void fun(shared_ptr<Widget> sp1, shared_ptr<Widget> sp2);

函數可能被這樣調用:

// BAD: potential leak
fun(shared_ptr<Widget>(new Widget(a, b)), shared_ptr<Widget>(new Widget(c, d)));

因為編譯器可能會調整構建函數參數的兩個表達式的執行順序,這段代碼在發生異常時會出問題。通常,編譯器會交錯執行兩個表達式:(使用new進行)兩個對象的內存分配可能首先進行,接下來調用兩個Widget的構造函數。如果一個調用某個構造函數是拋出異常,那么另一個就永遠不會被釋放。

這個不易察覺的問題有一個簡單的解決方案:永遠不在一個表達式中執行兩次(含兩次)以上的顯式資源分配。例如:

shared_ptr<Widget> sp1(new Widget(a, b)); // Better, but messy
fun(sp1, new Widget(c, d));

最好的解決方案是使用返回管理對象的工廠方法徹底避免顯式資源分配。

fun(make_shared<Widget>(a, b), make_shared<Widget>(c, d)); // Best

如果目前還不存在,那就自己寫工廠包裝類。

Enforcement(實施建議)

  • 標記具有多個顯式分配資源的表達式(問題是:我們可以識別出多少顯式分配資源的情況?)

到此,相信大家對“C++為什么在一個表達式中最多只執行一次顯式資源分配”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

浪卡子县| 新宾| 连山| 泾阳县| 澄迈县| 原平市| 宣威市| 蒲城县| 平罗县| 南溪县| 岳普湖县| 无极县| 永靖县| 福泉市| 綦江县| 内黄县| 榆树市| 保亭| 枣庄市| 木兰县| 隆子县| 芜湖市| 吉木萨尔县| 冷水江市| 文成县| 永仁县| 泊头市| 清流县| 蕉岭县| 延长县| 仲巴县| 富源县| 澄城县| 沿河| 安多县| 雅江县| 江永县| 石门县| 全椒县| 故城县| 贺州市|