對第一次接觸到C++程序的用戶和學者來說,了解C++語言的概念是非常重要的,那麼就先說一下什麼是C++語言,所謂C++語言:是一種使用非常廣泛的計算機編程語言。
在visual studio.NET中引入了對C++擴展名的處理,擴展名是以兩個下劃線開始的關鍵字,比如__gc和__property.自從上個版本發布以來,我已經寫了大量的雙下劃線特征的代碼,我坦白也不喜歡這樣。
我了解具體的原因是:帶兩個下劃線的關鍵字作為特殊的擴展名使它們不會跟標准編譯器相混淆,你可以全面的管理擴展名可以用其他的編譯器來編譯,它忽視__關鍵字。這是一種解決方法:微軟發現了一種方法不改變編程語言的改變,但是會出現下面一些結果:
- //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;
- }
- }
有良好習慣的C++程序員把get和put放在每個擴展名的右面,把潛在的變量放在旁邊,但是編程語言沒要求你這樣做。它提供無環境支持定界結構讓你明白作為一個單元是正確的。
所以它是不自然的跟其它visual studio .NET語言不一樣。但是你如何去處理這個問題那,唯一的方式完成C++程序換成CLR反之就要改變C++程序假如你想那樣做,你可以有足夠的自由得到自然一流的語言會給你最好的,你可以取消大量的帶雙劃線的關鍵字。
我喜歡確定的解析,實際上我也喜歡碎片收集,我還能舉出更多的,它們有自己的作用而且我也需要它們,假如我只在內存中構造一個對象,我希望在我自己清除它前不被清除,
所以內存管理是很復雜的。但是,如果你的對象包含一個非管理的源文件如數據庫鏈接,一個開放文件,或者類似我要取得一個控制。我想知道它要盡快的離開,用這種模式去處理,但是它不是直接的,簡單的親密支持是最好的辦法。
當對象在管理堆裡時,你不能把它刪除,它將被碎片收集清除,如果你想清除管理著源文件的對象,你可以調用dispose()函數,雖然C#為它提供了的有效的結構,但是它仍然不象堆棧那樣簡單。
在新一代的語言(以前是C++/CLI),你在哪裡建立對象不依賴於你建立對象的種類,你可以堆棧中管理對象,它有確定的解析,但它越界時將被清除,如果你願意你可以在管理堆裡建立對象。
這種變化帶來其它的結果,其中最深遠的是你可以把不同的對象放在摸板中或者可以把它看成其它類的成員變量,你可以得到完整的C++程序生存時間周期,而不是僅僅是把它分配到相應的堆,然後等碎片收集來處理它。