




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第C++資源管理操作方法詳解目錄以對象管理資源在資源管理類中小心copy行為在資源管理類中提供對原始資源的訪問成對使用new和delete時要采用相同形式以獨立語句將new對象置入智能指針
以對象管理資源
classA{...};
//工廠函數(shù)createA來提供特定的A對象
A*createA();
//壞情況
voidf(){
A*p=createA();
deletep;//如何在delete之前程序先return了,則無法delete
//為了確保資源釋放將資源放進對象內(nèi)利用對象的析構(gòu)函數(shù)來釋放
voidf(){
std::shared_ptrAp(createA());
//程序結(jié)束后會經(jīng)shared_ptr的析構(gòu)函數(shù)釋放
}
auto_ptr已經(jīng)被廢除,主要原因是其拷貝會造成所以權(quán)轉(zhuǎn)移,所以使用shared_ptr更好
以對象管理資源的關(guān)鍵想法:
1、獲得資源后立刻放進管理對象內(nèi)
2、管理對象運用析構(gòu)函數(shù)釋放資源
注意是:shared_ptr和auto_ptr兩者都在析構(gòu)函數(shù)上使用delete而不是delete[],所以在動態(tài)分配的數(shù)組上使用它們不好。當(dāng)然我覺得還是少用動態(tài)數(shù)組,用vector,string啥的就能代替咯。
在資源管理類中小心copy行為
復(fù)制RAII對象時有兩種選擇:
1、禁止復(fù)制--------將copying操作聲明為private
classLock:privateUncopyable{
public:
....
};
2、對底層資源祭出引用計數(shù)法--------即shared_ptr
classLock{
public:
explicitLock(Mutex*pm):mutexPtr(pm,unlock)//unlock函數(shù)為刪除器
lock(mutexPtr.get());
private:
shared_ptrMutexmutexPtr;
}
復(fù)制底部資源:需要資源管理類對象的唯一理由是不需要某個復(fù)件資源時確保被釋放,在此情況下復(fù)制資源管理類對象,應(yīng)該也復(fù)制其所包括的資源,即深拷貝------當(dāng)一個對象被復(fù)制時,不論指針或其所指內(nèi)存都會被制作出一個復(fù)件,即深拷貝。
轉(zhuǎn)移底部資源所有權(quán):auto_ptr,你只希望有一個RAII對象指向一個未加工資源,即使被復(fù)制也是如此。
在資源管理類中提供對原始資源的訪問
前提:智能指針其實是一個類
shared_ptrAp(createA());
//假如有以下函數(shù)
intfunc(constA*pi);
//如下調(diào)用錯誤因為p是一個智能指針不是一個指向A的指針
intf=func(p);
//調(diào)用get函數(shù)返回原始資源
intf=func(p.get());
智能指針重載了指針取值操作符(-,*)允許隱式轉(zhuǎn)換到原始指針
//例如A有一個函數(shù),p是一個指向A的智能指針
intA::getNum();
//如下調(diào)用合格,其實是發(fā)生了一個智能指針到原始指針的隱式轉(zhuǎn)換
intnum=p-getNum();
一般而言顯示轉(zhuǎn)換比較安全,隱式轉(zhuǎn)換客戶使用方便。
成對使用new和delete時要采用相同形式
delete的最大問題在于:即將被刪除的內(nèi)存之內(nèi)究竟有多少個對象
即:被刪除的那個指針是指的單一對象還是成對數(shù)組?
string*p1=newstring;
string*p2=newstring[100];
deletep1;
delete[]p2;
規(guī)則很簡單:new中用了[],delete就要用[]
以獨立語句將new對象置入智能指針
假設(shè)有一個函數(shù)來揭示處理程序的優(yōu)先權(quán),另一個函數(shù)用來在動態(tài)分配所得的Widget上進行某些帶有優(yōu)先權(quán)的處理
intpriority();
voidprocessWidget(shared_ptrWidgetpw,intpriority);
processWideget(newWidget,priority());
//因為shared_ptr的構(gòu)造函數(shù)需要一個原始指針,該構(gòu)造函數(shù)是explicit,無法隱式轉(zhuǎn)換
processWideget(shared_ptrWidget(newWidget),priority());//可以
但是編譯器執(zhí)行順序不確定,調(diào)用該函數(shù)前,編譯器需要:
調(diào)用priority,執(zhí)行newWidget,shared_ptr構(gòu)造函數(shù)
但調(diào)用priority的順序可以是第一第二或第三(new和智能指針的先后順序不能變)
如何是先new,后priority,再shared_ptr,萬一priority調(diào)用失常,則new出來的指針遺
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廣東深圳大學(xué)人文學(xué)院謝曉霞教授博士后招聘1人考前自測高頻考點模擬試題及完整答案詳解
- 2025年宿州學(xué)院專職輔導(dǎo)員公開招聘12人考前自測高頻考點模擬試題及答案詳解(必刷)
- 滑雪場專業(yè)知識培訓(xùn)總結(jié)課件
- DB11∕T 1165.9-2019 收費公路聯(lián)網(wǎng)收費系統(tǒng) 第9部分:應(yīng)用軟件技術(shù)要求
- 滑雪健將課件
- 中國光伏匯流箱行業(yè)投資分析、市場運行態(tài)勢、未來前景預(yù)測報告(智研咨詢)
- 2025年中國管網(wǎng)特殊空間機器人行業(yè)市場運行態(tài)勢、進出口貿(mào)易及發(fā)展趨勢預(yù)測報告
- 痛經(jīng)科普課件
- 2025年4月山東中醫(yī)藥大學(xué)附屬醫(yī)院合同制人員招聘113人考前自測高頻考點模擬試題及答案詳解參考
- 祖先的搖籃陸虹課件
- 暴雨過后工地復(fù)工復(fù)產(chǎn)方案
- 物業(yè)項目開辦物資明細(xì)表(參考)
- TNBSIA 001-2024 建筑設(shè)備一體化管控平臺建設(shè)技術(shù)要求
- DL-T-5161.5-2018電氣裝置安裝工程質(zhì)量檢驗及評定規(guī)程第5部分:電纜線路施工質(zhì)量檢驗
- JT-T-848-2013公路用復(fù)合隔離柵立柱
- 《客艙安全與應(yīng)急處置》-課件:其他輔助設(shè)備
- 工廠搬家方案
- chap5-高性能混凝土的性能-物理力學(xué)性能
- 縣河長制方案
- 基于韌性原則的鄉(xiāng)村低密度住宅規(guī)劃體系構(gòu)建
- 綜合實踐《中華傳統(tǒng)節(jié)日》課件
評論
0/150
提交評論