淺析Visual Studio中的C++程序變化
對(duì)第一次接觸到C++程序的用戶和學(xué)者來(lái)說(shuō),了解C++語(yǔ)言的概念是非常重要的,那么就先說(shuō)一下什么是C++語(yǔ)言,所謂C++語(yǔ)言:是一種使用非常廣泛的計(jì)算機(jī)編程語(yǔ)言。
在visual studio.NET中引入了對(duì)C++擴(kuò)展名的處理,擴(kuò)展名是以?xún)蓚€(gè)下劃線開(kāi)始的關(guān)鍵字,比如__gc和__property.自從上個(gè)版本發(fā)布以來(lái),我已經(jīng)寫(xiě)了大量的雙下劃線特征的代碼,我坦白也不喜歡這樣。
我了解具體的原因是:帶兩個(gè)下劃線的關(guān)鍵字作為特殊的擴(kuò)展名使它們不會(huì)跟標(biāo)準(zhǔn)編譯器相混淆,你可以全面的管理擴(kuò)展名可以用其他的編譯器來(lái)編譯,它忽視__關(guān)鍵字。這是一種解決方法:微軟發(fā)現(xiàn)了一種方法不改變編程語(yǔ)言的改變,但是會(huì)出現(xiàn)下面一些結(jié)果:
- //this is a code fragment
 - {
 - try
 - {
 - Foo* f=new Foo(/* params */);
 - //all kinds of code, some of which might throw exceptions
 - delete f;
 - }
 - catch (/* something */)
 - {
 - delete f;
 - //whatever else, or rethrow;
 - }
 - }
 
有良好習(xí)慣的C++程序員把get和put放在每個(gè)擴(kuò)展名的右面,把潛在的變量放在旁邊,但是編程語(yǔ)言沒(méi)要求你這樣做。它提供無(wú)環(huán)境支持定界結(jié)構(gòu)讓你明白作為一個(gè)單元是正確的。
所以它是不自然的跟其它visual studio .NET語(yǔ)言不一樣。但是你如何去處理這個(gè)問(wèn)題那,唯一的方式完成C++程序換成CLR反之就要改變C++程序假如你想那樣做,你可以有足夠的自由得到自然一流的語(yǔ)言會(huì)給你最好的,你可以取消大量的帶雙劃線的關(guān)鍵字。
我喜歡確定的解析,實(shí)際上我也喜歡碎片收集,我還能舉出更多的,它們有自己的作用而且我也需要它們,假如我只在內(nèi)存中構(gòu)造一個(gè)對(duì)象,我希望在我自己清除它前不被清除,
所以?xún)?nèi)存管理是很復(fù)雜的。但是,如果你的對(duì)象包含一個(gè)非管理的源文件如數(shù)據(jù)庫(kù)鏈接,一個(gè)開(kāi)放文件,或者類(lèi)似我要取得一個(gè)控制。我想知道它要盡快的離開(kāi),用這種模式去處理,但是它不是直接的,簡(jiǎn)單的親密支持是最好的辦法。
當(dāng)對(duì)象在管理堆里時(shí),你不能把它刪除,它將被碎片收集清除,如果你想清除管理著源文件的對(duì)象,你可以調(diào)用dispose()函數(shù),雖然C#為它提供了的有效的結(jié)構(gòu),但是它仍然不象堆棧那樣簡(jiǎn)單。
  
在新一代的語(yǔ)言(以前是C++/CLI),你在哪里建立對(duì)象不依賴(lài)于你建立對(duì)象的種類(lèi),你可以堆棧中管理對(duì)象,它有確定的解析,但它越界時(shí)將被清除,如果你愿意你可以在管理堆里建立對(duì)象。
這種變化帶來(lái)其它的結(jié)果,其中最深遠(yuǎn)的是你可以把不同的對(duì)象放在摸板中或者可以把它看成其它類(lèi)的成員變量,你可以得到完整的C++程序生存時(shí)間周期,而不是僅僅是把它分配到相應(yīng)的堆,然后等碎片收集來(lái)處理它。
【編輯推薦】















 
 
 
 
 
 
 