中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做網(wǎng)站的價位附近廣告公司聯(lián)系電話

做網(wǎng)站的價位,附近廣告公司聯(lián)系電話,中山市小欖新意網(wǎng)站設(shè)計有限公司,wordpress 管理后臺3.資源管理 條款13:以對象管理資源 以對象管理資源對于傳統(tǒng)的堆資源管理,我們需要使用成對的new和delete,這樣若忘記delete就會造成內(nèi)存泄露。因此,我們應(yīng)盡可能以對象管理資源,并采用RAII(Resource Acqu…

3.資源管理

條款13:以對象管理資源

以對象管理資源對于傳統(tǒng)的堆資源管理,我們需要使用成對的new和delete,這樣若忘記delete就會造成內(nèi)存泄露。因此,我們應(yīng)盡可能以對象管理資源,并采用RAII(Resource Acquisition Is Initialize,資源取得時機便是初始化時機),讓析構(gòu)函數(shù)負(fù)責(zé)資源的釋放。

原書此處提到的auto_ptr的內(nèi)容已經(jīng)過時,在 C++11 中,通過專一所有權(quán)來管理RAII對象可以使用std::unique_ptr,通過引用計數(shù)來管理RAII對象可以使用std::shared_ptr。

std::unique_ptr<Investment> pUniqueInv1(CreateInvestment());
std::unique_ptr<Investment> pUniqueInv2(std::move(pUniqueInv1));    // 轉(zhuǎn)移資源所有權(quán)std::shared_ptr<Investment> pSharedInv1(CreateInvestment());
std::shared_ptr<Investment> pSharedInv2(pSharedInv1);               // 引用計數(shù)+1

智能指針默認(rèn)會自動delete所持有的對象,我們也可以為智能指針指定所管理對象的釋放方式(刪除器deleter):

std::unique_ptr<Investment, decltype(GetRidOfInvestment)*> pUniqueInv(CreateInvestment(), GetRidOfInvestment);
std::shared_ptr<Investment> pSharedInv(CreateInvestment(), GetRidOfInvestment);
  • 為防止資源泄露,請使用RAII對象,它們在構(gòu)造函數(shù)中獲得資源并在析構(gòu)函數(shù)中析構(gòu)函數(shù)中釋放資源
  • 兩個常被使用的RAII classes分別是shared_ptr和unique_ptr。前者通常是較佳的選擇,因為其copy行為比較直觀。

條款14:在資源管理類中小心拷貝行為

我們應(yīng)該永遠(yuǎn)保持這樣的思考:當(dāng)一個RAII對象被復(fù)制,會發(fā)生什么事?

選擇一:禁止復(fù)制

許多時候允許RAII對象被復(fù)制并不合理,如果確是如此,那么就該明確禁止復(fù)制行為,條款 6 已經(jīng)闡述了怎么做這件事。

選擇二:對底層資源祭出“引用計數(shù)法”

正如std::shared_ptr所做的那樣,每一次復(fù)制對象就使引用計數(shù)+1,每一個對象離開定義域就調(diào)用析構(gòu)函數(shù)使引用計數(shù)-1,直到引用計數(shù)為0就徹底銷毀資源。

選擇三:復(fù)制底層資源

在復(fù)制對象的同時復(fù)制底層資源的行為又被稱作深拷貝(Deep copying),例如在一個對象中有一個指針,那么在復(fù)制這個對象時就不能只復(fù)制指針,也要復(fù)制指針?biāo)赶虻臄?shù)據(jù)。

選擇四:轉(zhuǎn)移底層資源的所有權(quán)

和std::unique_ptr的行為類似,永遠(yuǎn)保持只有一個對象擁有對資源的管理權(quán),當(dāng)需要復(fù)制對象時轉(zhuǎn)移資源的管理權(quán)。

條款15:在資源管理類中提供對原始資源的訪問

Investment* pRaw = pSharedInv.get();    // 顯式訪問原始資源
Investment raw = *pSharedInv;           // 隱式訪問原始資源

當(dāng)我們在設(shè)計自己的資源管理類時,也要考慮在提供對原始資源的訪問時,是使用顯式訪問還是隱式訪問的方法,還是兩者皆可。

class Font {
public:FontHandle Get() const { return handle; }       // 顯式轉(zhuǎn)換函數(shù)operator FontHandle() const { return handle; }  // 隱式轉(zhuǎn)換函數(shù)private:FontHandle handle;
};
  • APIs往往要求訪問原始資源,所以每一個RAII class應(yīng)該提供一個“取得其所管理之資源”的方法
  • 對原始資源的訪問可能經(jīng)由顯示轉(zhuǎn)換或隱式轉(zhuǎn)換。一般而言顯示轉(zhuǎn)換比較安全,但隱式轉(zhuǎn)換對客戶比較方便。

條款16:成對使用new和delete要采取相同形式

使用new來分配單一對象,使用new[]來分配對象數(shù)組,必須明確它們的行為并不一致,分配對象數(shù)組時會額外在內(nèi)存中記錄“數(shù)組大小”,而使用delete[]會根據(jù)記錄的數(shù)組大小多次調(diào)用析構(gòu)函數(shù),使用delete則僅僅只會調(diào)用一次析構(gòu)函數(shù)。對于單一對象使用delete[]其結(jié)果也是未定義的,程序可能會讀取若干內(nèi)存并將其錯誤地解釋為數(shù)組大小。

int* array = new int[10];
int* object = new int;delete[] array;
delete object;

需要注意的是,使用typedef定義數(shù)組類型會帶來額外的風(fēng)險:
最好不要對數(shù)組形式做typedef動作

typedef std::string AddressLines[4];std::string* pal = new AddressLines;    // pal 是一個對象數(shù)組,而非單一對象delete pal;                             // 行為未定義
delete[] pal;                           // 正確
  • 如果你在new表達(dá)式中使用[ ],必須在相應(yīng)的delete表達(dá)式中也使用[ ]。如果你在new表達(dá)式中不適用[], 一定不要在相應(yīng)的delete表達(dá)式中使用[ ]

條款17:以獨立語句將 new出的對象置入智能指針

原書此處所講已過時,現(xiàn)在更好的做法是使用std::make_unique和std::make_shared:

auto pUniqueInv = std::make_unique<Investment>();    // since C++14
auto pSharedInv = std::make_shared<Investment>();    // since C++11

參考:知乎

http://www.risenshineclean.com/news/4066.html

相關(guān)文章:

  • 北京網(wǎng)站制作培訓(xùn)班網(wǎng)站推廣的工作內(nèi)容
  • 2024年樓市大局已定做seo需要哪些知識
  • 怎么做網(wǎng)站結(jié)構(gòu)圖東莞seo建站哪家好
  • 西安網(wǎng)站設(shè)計開發(fā)人才百度開放云平臺
  • 明會紅網(wǎng)站網(wǎng)文推廣怎么做
  • 溫州展廳設(shè)計公司青島網(wǎng)絡(luò)工程優(yōu)化
  • 深圳模板網(wǎng)站建設(shè)友情鏈接交換方式有哪些
  • 百度網(wǎng)做網(wǎng)站嗎寧波外貿(mào)網(wǎng)站推廣優(yōu)化
  • 北滘網(wǎng)站建設(shè)公司網(wǎng)圖識別在線百度
  • 佛山廠家推廣優(yōu)化seo網(wǎng)絡(luò)推廣專員招聘
  • 我的世界搞頭怎么做的視頻網(wǎng)站網(wǎng)絡(luò)營銷組織的概念
  • 重慶平臺網(wǎng)站建設(shè)平臺推廣普通話的文字內(nèi)容
  • 邯鄲市城市建設(shè)局網(wǎng)站天津seo排名
  • 北京做百度網(wǎng)站建設(shè)深圳推廣網(wǎng)絡(luò)
  • seo網(wǎng)站排名優(yōu)化公司哪家百度文庫網(wǎng)頁版
  • 企業(yè)wap網(wǎng)站模板現(xiàn)在陽性最新情況
  • 安卓應(yīng)用下載seo入門視頻
  • 數(shù)商云公司簡介百度seo快速排名優(yōu)化服務(wù)
  • 做軟件下載網(wǎng)站違法嗎點擊器 百度網(wǎng)盤
  • 石家莊有那些網(wǎng)站開發(fā)公司太原網(wǎng)站建設(shè)制作
  • 政府部門網(wǎng)站建設(shè)南寧seo外包要求
  • 做網(wǎng)站怎么和廣告公司合作怎么推廣自己的網(wǎng)站
  • 龍華營銷型網(wǎng)站制作哪家好沈陽網(wǎng)頁建站模板
  • 一鍵優(yōu)化ppt某企業(yè)網(wǎng)站的分析優(yōu)化與推廣
  • 寧波建設(shè)網(wǎng)站公眾號關(guān)注百度搜索引擎優(yōu)化方案
  • 網(wǎng)站建設(shè)有什么出路互聯(lián)網(wǎng)服務(wù)平臺
  • 海南免稅店網(wǎng)上商城湖北搜索引擎優(yōu)化
  • 自己做網(wǎng)站要會什么營銷策劃思路
  • 國內(nèi)十大高端定制西服品牌百度搜索關(guān)鍵詞排名優(yōu)化技術(shù)
  • 喜迎二十大演講稿搜易網(wǎng)優(yōu)化的效果如何