亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C++:最強大的.NET語言之對象構造

2019-11-17 05:25:43
字體:
來源:轉載
供稿:網友
簡介

   Visual C++開發小組花了大量的時間用于聽取用戶的意見,在對 .NET和C++經過仔細考量之后,決定在Visual C++ 2005中重新設計對通用語言運行時庫(CLR)的支持,此項重新的設計被稱為"C++/CLI",它將為使用及編寫CLR類型提供更自然的語法。在本文中,主要探討了新的語法,并將之與C#和托管C++這兩個CLR平臺上極其相近的語言進行比較,在文中也會適當地以圖表給出其與本地C++的相似之處。

   通用語言運行時庫(CLR)包括了一組規范,其是Microsoft .NET的基礎,也是CLI的Microsoft版本實現。C++/CLI語言設計的目標是為了對CLI提供更自然的C++支持,而Visual C++ 2005的編譯器則在CLR上實現了C++/CLI。

   當在仔細研究了Visual C++ 2005編譯器和C++/CLI語言設計之后,就會發現它們傳達了兩條重要的訊息;首先,Visual C++把自己定位于在CLR平臺上的最低級編程語言,(看起來似乎沒有必要使用其他語言了--包括MSIL);其次,.NET編程應與本地C++編程一樣自然。

   本文針對C++程序員,但并不想說服你放棄C#或者Visual Basic .NET。假如你非常喜歡C++,并想繼續使用傳統C++提供的全部功能,而又想要C#般的編程效率,那本文正適合你。另外,本文并不是CLR或 .NET Framework的簡介,而把重點放在Visual C++ 2005是怎樣使你可以編寫 .NET Framework上更優雅和高效的代碼。

對象構造

   CLR定義了兩種類型:值類型和引用類型。值類型被設計用于可進行高效地分配和訪問,它們與C++的內置類型大體相似,你也能創建屬于你自己的類型,這就是Bjarne Stroustrup所稱的具體類型;另一方面,引用類型被設計用于提供面向對象編程所需的特性,可用于創建有著層次結構的類:例如派生類和虛擬函數。另外在CLR中,引用類型自始至終都提供了額外的運行時特性,如自動內存治理--通常稱為垃圾回收。同時,對引用類型和值類型,CLR也提供了精確的運行時類信息,這種特性通常被稱為反射。

   值類型分配在堆棧上;而引用類型通常分配在托管堆中--這是由CLR垃圾回收機制所治理的堆。假如你在C++中編寫匯編代碼,如平時那樣,可在CRT堆中分配本地C++類型,在將來,Visual C++開發小組甚至答應你在托管堆中分配本地C++類型,究竟,垃圾回收對本地類型來說,也是一個極具吸引力的主題。

   本地C++答應選擇在何處創建一個特定的對象,任何類型都可分配在堆?;駽RT堆中。

// 分配在堆棧上
std::wstring stackObject;

// 分配在CRT堆中
std::wstring* heapObject = new std::wstring;

   如上所示,在何處分配對象是獨立于類型的,主動權完全把握在程序員的手中。另外,堆棧與堆的分配語法也是易于區別的。

   另一方面,C#通常是在堆棧上創建值類型,而在托管堆中創建引用類型。下例中使用的System.DateTime類型,被聲明為值類型。

// 分配在堆棧上
System.DateTime stackObject = new System.DateTime(2003, 1, 18);

// 分配在托管堆中
System.IO.MemoryStream heapObject = new System.IO.MemoryStream();

   如上例所示,聲明對象的方式并沒有指出對象分配在堆棧上或托管堆中,其完全取決于程序編寫者和運行時庫。

   C++的托管擴展--簡稱為托管C++,可在本地C++代碼中混合托管代碼。為了遵循C++標準,C++被加入了擴展,以提供對CLR的全面支持。不幸的是,正是因為有太多的擴展,所以假如要用C++來編寫大量的托管代碼,就成了一件異常痛苦的事。

//分配在堆棧上
DateTime stackObject(2003, 1, 18);

//分配在托管堆中
IO::MemoryStream __gc* heapObject = __gc new IO::MemoryStream;

   在C++程序員看來,在堆棧上分配一個值類型看起來非常正常,而在托管堆中的分配方式,看起來就有點怪:__gc是托管C++擴展中的一個要害字,有意思的是,在某些情況下,托管C++能推斷你的意思,所以上述例子可重寫為不帶__gc要害字。

//分配在托管堆中
IO::MemoryStream* heapObject = new IO::MemoryStream;

   這樣看起來更像本地C++代碼了--但heapObject并不是一個真正的C++指針。C++程序員通常傾向于在指針中保存一個不變的數值,但垃圾回收器會在任何時候,在內存中移動對象。另一個不足之處是,不能僅僅依靠查看代碼,就能確定對象是分配在本地還是托管堆中,必須知道程序編寫者是怎樣定義一個類型的。

   C++/CLI為此引入了句柄的概念,以便把CLR對象引用與C++指針區別開來。少了C++指針含義的重載,語言中也少了很多歧義,另外,通過句柄,對CLR也能提供更加自然的支持,例如,你能在C++中,直接對引用類型使用操作符重載,因為此時句柄已經能支持操作符重載了。由于C++禁止指針操作符重載,假如沒有"托管"指針,這幾乎不可能實現。

//分配在堆棧上
DateTime stackObject(2003, 1, 18);

//分配在托管堆中
IO::MemoryStream^ heapObject = gcnew IO::MemoryStream;

   相對于值類型聲明來說,和以前沒什么不同,但對引用類型聲明來說,變化卻很明顯,操作符 ^ 把變量聲明為對一個CLR引用類型的句柄。當垃圾回收器在內存中移動被引用的對象時,同時也會自動更新句柄的值。另外,它們是可重綁定的,這答應它們可像C++指針那樣指向不同的對象。另外需注重的一件事是,操作符gcnew已經代替了操作符new,清楚地指明了對象被分配在托管堆中。對托管類型,操作符new已經不能被重載(此處并非語帶雙關),只能把對象分配在CRT堆中,除非你提供自己重寫的new操作符。

   簡而言之:本地C++指針已經與CLR對象引用大不相同了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久综合亚洲社区| 久久久国产在线视频| 亚洲天堂av图片| 91久久精品美女高潮| 国产国语刺激对白av不卡| 亚洲人高潮女人毛茸茸| 国产91免费看片| 欧美激情a在线| 日韩**中文字幕毛片| 色婷婷av一区二区三区久久| 国产亚洲精品一区二555| 亚洲国产精品99久久| 亚洲一品av免费观看| 成人免费网视频| 九九久久久久久久久激情| 亚洲国产日韩欧美综合久久| 国产精品久久久久一区二区| 九九视频这里只有精品| 97久久精品人人澡人人爽缅北| 91在线观看免费观看| 欧美一区第一页| 少妇激情综合网| 久久精品电影网| 中文字幕国内精品| 在线观看欧美日韩国产| 国产精品极品尤物在线观看| 91在线观看免费高清| 午夜精品久久久99热福利| 精品欧美国产一区二区三区| 国产91精品久久久久久久| 日韩欧美在线国产| 欧美在线视频导航| 亚洲国产精品久久久久秋霞不卡| 日韩在线小视频| 琪琪第一精品导航| 午夜美女久久久久爽久久| 日韩福利在线播放| 操91在线视频| 成人妇女免费播放久久久| 91精品国产高清自在线| 一本色道久久综合狠狠躁篇怎么玩| 日韩av在线直播| 亚洲最大福利视频网站| 国产在线精品自拍| 日韩中文字幕在线视频播放| 宅男66日本亚洲欧美视频| 欧美成人亚洲成人日韩成人| 久久人人爽人人爽人人片av高清| 一区二区成人精品| 中文字幕日韩精品在线| 人人澡人人澡人人看欧美| 国产精品美腿一区在线看| 亚洲精品电影在线| 亚洲欧美日韩国产成人| 亚洲国产精彩中文乱码av在线播放| 欧美激情亚洲自拍| 亚洲人成网站色ww在线| 精品国内自产拍在线观看| 亚洲sss综合天堂久久| 97在线精品国自产拍中文| 蜜臀久久99精品久久久无需会员| 日本a级片电影一区二区| 色99之美女主播在线视频| 亚洲人成伊人成综合网久久久| 亚洲伊人一本大道中文字幕| 国产精品夜色7777狼人| 亚洲人成在线观看网站高清| 亚洲欧美在线一区二区| 国产精品7m视频| 亚洲欧美日韩综合| 国产成人精品在线视频| 精品国产拍在线观看| 午夜精品一区二区三区在线| 亚洲成人精品久久| 欧美日韩一区二区免费在线观看| 欧美性资源免费| 国产成人精品一区二区在线| 毛片精品免费在线观看| 日韩精品丝袜在线| 亚洲女人初尝黑人巨大| 色妞色视频一区二区三区四区| 日韩免费观看在线观看| 午夜精品久久久久久久久久久久久| 久久人人爽人人爽爽久久| 国产美女精品视频| 国产精品视频自在线| 狠狠色香婷婷久久亚洲精品| 日日噜噜噜夜夜爽亚洲精品| 亚洲图片制服诱惑| 2020国产精品视频| 日韩高清电影免费观看完整版| 91久久久久久久久久| 中文字幕一区二区精品| 国内精品小视频在线观看| 97国产在线观看| 中文字幕亚洲综合| 久久人人爽人人爽人人片av高清| 亚洲欧美制服综合另类| 91免费的视频在线播放| 九九精品在线播放| 亚洲国产精品久久91精品| 日韩av一区在线观看| 日本免费一区二区三区视频观看| 按摩亚洲人久久| 亚洲人成毛片在线播放| 亚洲国产成人精品久久| 久久亚洲精品中文字幕冲田杏梨| 精品少妇v888av| 在线精品国产欧美| 91av中文字幕| 国产精品视频一区二区高潮| 中文字幕最新精品| 国产999精品视频| 欧美精品videos性欧美| 欧美日韩国产麻豆| 久久精品中文字幕| 国产欧美欧洲在线观看| 亚州国产精品久久久| 日韩美女在线观看一区| 欧美精品精品精品精品免费| 九九九热精品免费视频观看网站| 亚洲码在线观看| 亚洲xxx视频| 九九热最新视频//这里只有精品| 自拍偷拍亚洲精品| 在线激情影院一区| 中文字幕欧美亚洲| 欧美激情手机在线视频| 国产精品女主播| 成人写真福利网| 一区二区三区美女xx视频| 欧美激情日韩图片| 国产97在线视频| 久久中文久久字幕| 成人国产在线视频| 国产美女精品视频免费观看| 亚洲精品视频免费在线观看| 久久中文字幕国产| 久久精品视频在线| 97视频国产在线| 亚洲精品av在线播放| 欧美另类极品videosbestfree| 国产精品免费在线免费| 欧美性videos高清精品| 色中色综合影院手机版在线观看| 亚洲国产天堂久久国产91| 久久久久久久久久国产| 久久久久久成人| 亚洲成人av在线播放| 日韩精品免费一线在线观看| 九九热精品在线| 97婷婷大伊香蕉精品视频| 免费不卡欧美自拍视频| 精品久久久中文| 日韩av电影免费观看高清| 欧美激情一区二区三区高清视频| 亚洲一区二区福利| 国产精品久久久久久影视| 久久久久久av| 一本一本久久a久久精品综合小说| 欧美激情啊啊啊| 欧美精品亚州精品| 亚洲第一区在线观看| 伦理中文字幕亚洲|