新聞中心
C++作為一種編程語(yǔ)言,僅僅是它的語(yǔ)法、特性、標(biāo)準(zhǔn)類庫(kù)就已經(jīng)是一項(xiàng)非常難理解的東西了,所以在開始接觸時(shí),一定要打下良好的代碼,這樣才會(huì)給今后的學(xué)習(xí)帶來便捷的道路。下面說一下C++風(fēng)格與技巧問題。

創(chuàng)新互聯(lián)專注于莎車網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供莎車營(yíng)銷型網(wǎng)站建設(shè),莎車網(wǎng)站制作、莎車網(wǎng)頁(yè)設(shè)計(jì)、莎車網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造莎車網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供莎車網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
早在1981年,我就指出,通過將我必須顯式地跟蹤的對(duì)象的數(shù)量從幾萬個(gè)減少到幾打,為了使程序正確運(yùn)行而付出的努力從可怕的苦工,變成了應(yīng)付一些可管理的對(duì)象,甚至更加簡(jiǎn)單了。如果你的程序還沒有包含將顯式內(nèi)存管理減少到最小限度的庫(kù),那么要讓你程序完成和正確運(yùn)行的話,最快的途徑也許就是先建立一個(gè)這樣的庫(kù)。
- #include
- #include
- using namespace std;
- struct S {
- S() { cout << "make an S\n"; }
- ~S() { cout << "destroy an S\n"; }
- S(const S&) { cout << "copy initialize an S\n"; }
- S& operator=(const S&) { cout << "copy assign an S\n"; }
- };
模板和標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)了容器、資源句柄以及諸如此類的東西,更早的使用甚至在多年以前。異常的使用使之更加完善。如果你實(shí)在不能將內(nèi)存分配/重新分配的操作隱藏到你需要的對(duì)象中時(shí),你可以使用資源句柄(resource handle),以將內(nèi)存泄漏的可能性降至最低。
這里有個(gè)例子:我需要通過一個(gè)函數(shù),C++風(fēng)格與技巧在空閑內(nèi)存中建立一個(gè)對(duì)象并返回它。這時(shí)候可能忘記釋放這個(gè)對(duì)象。畢竟,我們不能說,僅僅關(guān)注當(dāng)這個(gè)指針要被釋放的時(shí)候,誰將負(fù)責(zé)去做。
使用資源句柄,這里用了標(biāo)準(zhǔn)庫(kù)中的auto_ptr,使需要為之負(fù)責(zé)的地方變得明確了。在更一般的意義上考慮資源,而不僅僅是內(nèi)存。如果在你的環(huán)境中不能系統(tǒng)地應(yīng)用這些技巧(例如,你必須使用別的地方的代碼。
或者你的程序的另一部分簡(jiǎn)直是原始人類(譯注:原文是Neanderthals,尼安德特人,舊石器時(shí)代廣泛分布在歐洲的猿人)寫的,如此等等),那么注意使用一個(gè)內(nèi)存泄漏檢測(cè)器作為開發(fā)過程的一部分,或者插入一個(gè)垃圾收集器(garbage collector)。
我為什么在捕獲一個(gè)異常之后就不能繼續(xù)?換句話說,C++為什么不提供一種簡(jiǎn)單的方式,讓程序能夠回到異常拋出點(diǎn)之后,并繼續(xù)執(zhí)行?主要的原因是,如果從異常處理之后繼續(xù),那么無法預(yù)知擲出點(diǎn)之后的代碼如何對(duì)待異常處理,是否僅僅繼續(xù)執(zhí)行,就象什么也沒有發(fā)生一樣。
異常處理者無法知道,在繼續(xù)之前,有關(guān)的上下文環(huán)境(context)是否是“正確”的。要讓這樣的代碼正確執(zhí)行,拋出異常的編寫者與捕獲異常的編寫者必須對(duì)彼此的代碼與上下文環(huán)境都非常熟悉才行。這樣會(huì)產(chǎn)生非常復(fù)雜的依賴性,因此無論在什么情況下,都會(huì)導(dǎo)致一系列嚴(yán)重的維護(hù)問題。
當(dāng)我設(shè)計(jì)C++的異常處理機(jī)制時(shí),我曾經(jīng)認(rèn)真地考慮過C++風(fēng)格與技巧允許這種繼續(xù)的可能性,而且在標(biāo)準(zhǔn)化的過程中,這個(gè)問題被非常詳細(xì)地討論過。請(qǐng)參見《C++語(yǔ)言的設(shè)計(jì)和演變》中的異常處理章節(jié)。
網(wǎng)站名稱:C++風(fēng)格與技巧說明介紹
本文URL:http://m.fisionsoft.com.cn/article/djshjeo.html


咨詢
建站咨詢
