假設(shè)你使用一個(gè)class 負(fù)責(zé)數(shù)據(jù)庫(kù)連接:
10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有桂陽(yáng)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。class DBConnection {public:
static DBConnection create(); // 這個(gè)函數(shù)返回DBConnection對(duì)象;
void close(); // 關(guān)閉聯(lián)機(jī); 失敗則拋出異常
};
創(chuàng)建一個(gè)用來管理DBConnection 資源的class , 并在其析構(gòu)函數(shù)中調(diào)用close。
class DBConn {public:
~DBConn() {// 確保數(shù)據(jù)庫(kù)連接總是會(huì)被關(guān)閉
db.close();
}
private:
DBConnection db{};
};
這便允許客戶寫出這樣的代碼:
{// 開啟一個(gè)區(qū)塊(block)。
DBConn dbc(DBConnection::create()); // 建立DBConnection對(duì)象并交給DBConn 對(duì)象以便管理
// 通過DBConn的接口
// 使用 DBConnection對(duì)象
// 在區(qū)塊結(jié)束點(diǎn), DBConn對(duì)象
// 被銷毀, 因而自動(dòng)
// 為DBConnection 對(duì)象調(diào)用close
}
&nbs; 如果該調(diào)用導(dǎo)致異常, DBConn析構(gòu)函數(shù)會(huì)傳播該異常, 也就是允許它離開這個(gè)析構(gòu)函數(shù)。 那會(huì)造成問題, 因?yàn)槟蔷褪菕伋隽穗y以駕馭的麻煩。
DBConn::~DBConn() {try{db.close();
} catch (...) {制作運(yùn)轉(zhuǎn)記錄, 記下對(duì)close的調(diào)用失敗;
std::abort();
}
}
如果程序遭遇一個(gè)"在析構(gòu)期間發(fā)生的錯(cuò)誤"后無法繼續(xù)執(zhí)行, “強(qiáng)迫結(jié)束程序”是個(gè)合理選項(xiàng)。 畢竟它可以阻止異常從析構(gòu)函數(shù)傳播出去(那會(huì)導(dǎo)致不明確的行為)。
2. 吞下因調(diào)用close而發(fā)生的異常
DBConn::~DBConn()
{try {db.close();
}
catch (...) {制作運(yùn)轉(zhuǎn)記錄, 記下對(duì)close的調(diào)用失敗;
}
}
一個(gè)較佳策略是重新設(shè)計(jì)DBConn接口, 使其客戶有機(jī)會(huì)對(duì)可能出現(xiàn)的問題作出反應(yīng)。
class DBConn {public:
void close(){// 供客戶使用的新函數(shù)
db.close();
closed = true;
}
~DBConn() {if (!closed) { try {// 關(guān)閉連接
db.close();
}
catch (...) { // 如果關(guān)閉動(dòng)作失敗,
制作運(yùn)轉(zhuǎn)記錄, 記下對(duì)close的調(diào)用失敗; // 記錄下來并結(jié)束程序
} // 或吞下異常
}
}
private:
DBConnection db;
bool closed;
};
總結(jié):
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)名稱:條款08:別讓異常逃離析構(gòu)函數(shù)-創(chuàng)新互聯(lián)
URL標(biāo)題:http://bm7419.com/article34/dgdgpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、電子商務(wù)、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容