中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

钟祥市| 高台县| 彭水| 张家川| 金塔县| 特克斯县| 邻水| 桦川县| 莲花县| 山东省| 河南省| 闽侯县| 桓仁| 博兴县| 阿拉善盟| 黄浦区| 通榆县| 宜春市| 清镇市| 翼城县| 漯河市| 阳新县| 深圳市| 易门县| 黄陵县| 从江县| 康平县| 博野县| 新绛县| 河津市| 新源县| 惠州市| 亳州市| 海兴县| 鄂尔多斯市| 襄樊市| 武乡县| 玉溪市| 洪洞县| 黑水县| 武城县|