欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

條款08:別讓異常逃離析構(gòu)函數(shù)-創(chuàng)新互聯(lián)

假設(shè)你使用一個class 負(fù)責(zé)數(shù)據(jù)庫連接:

10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有桂陽免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
class DBConnection {public:
	static DBConnection create(); // 這個函數(shù)返回DBConnection對象;
	void close(); // 關(guān)閉聯(lián)機(jī); 失敗則拋出異常
};

創(chuàng)建一個用來管理DBConnection 資源的class , 并在其析構(gòu)函數(shù)中調(diào)用close。

class DBConn {public:
	~DBConn() {// 確保數(shù)據(jù)庫連接總是會被關(guān)閉
		db.close();
	}
private:
	DBConnection db{};
};

這便允許客戶寫出這樣的代碼:

{// 開啟一個區(qū)塊(block)。
DBConn dbc(DBConnection::create());	// 建立DBConnection對象并交給DBConn 對象以便管理
									// 通過DBConn的接口
									// 使用 DBConnection對象
									// 在區(qū)塊結(jié)束點, DBConn對象
									// 被銷毀, 因而自動
									// 為DBConnection 對象調(diào)用close
}

&nbs; 如果該調(diào)用導(dǎo)致異常, DBConn析構(gòu)函數(shù)會傳播該異常, 也就是允許它離開這個析構(gòu)函數(shù)。 那會造成問題, 因為那就是拋出了難以駕馭的麻煩。

  1. 如果close 拋出異常就結(jié)束程序。 通常通過調(diào)用abort完成:
DBConn::~DBConn() {try{db.close();
	} catch (...) {制作運(yùn)轉(zhuǎn)記錄, 記下對close的調(diào)用失敗;
		std::abort();
	}
}

如果程序遭遇一個"在析構(gòu)期間發(fā)生的錯誤"后無法繼續(xù)執(zhí)行, “強(qiáng)迫結(jié)束程序”是個合理選項。 畢竟它可以阻止異常從析構(gòu)函數(shù)傳播出去(那會導(dǎo)致不明確的行為)。
2. 吞下因調(diào)用close而發(fā)生的異常

DBConn::~DBConn() 
{try {db.close();
	} 
	catch (...) {制作運(yùn)轉(zhuǎn)記錄, 記下對close的調(diào)用失敗;
	}
}

一個較佳策略是重新設(shè)計DBConn接口, 使其客戶有機(jī)會對可能出現(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)閉動作失敗,
				制作運(yùn)轉(zhuǎn)記錄, 記下對close的調(diào)用失敗; 	// 記錄下來并結(jié)束程序
			}										// 或吞下異常
		}
	}
	private:
		DBConnection db;
		bool closed;
};

總結(jié):

  1. 析構(gòu)函數(shù)絕對不要吐出異常。 如果一個被析構(gòu)函數(shù)調(diào)用的函數(shù)可能拋出異常, 析構(gòu)函數(shù)應(yīng)該捕獲任何異常, 然后吞下它們或結(jié)束程序。
  2. 如果客戶需要對某個操作函數(shù)運(yùn)行期間拋出的異常做出反應(yīng), 那么class應(yīng)該提供一個普通函數(shù)(而非在析構(gòu)函數(shù)中)執(zhí)行該操作。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁名稱:條款08:別讓異常逃離析構(gòu)函數(shù)-創(chuàng)新互聯(lián)
URL標(biāo)題:http://chinadenli.net/article34/dgdgpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、電子商務(wù)、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計公司、網(wǎng)站內(nèi)鏈、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)