青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牧光小院

被約束的日日夜夜,停不下來的時間。

C++/CLI中的Handle和Reference小記

最近看了看C++/CLI specification。 的確,C++/CLI讓C++在使用.NET的時候手感好了很多,一點學習小記,說的不對,各位多包涵。


Handle Type

對于CLI中的任意一個類型T,T^聲明了一個Thandle類型,它用來指向創建在CLI Heap上的對象。由于創建載托管堆上的對象的位置有可能被運行時改變,因此,一個Handle類型可以動態跟蹤其指向的對象。從某種意義上說,我們可以把Handle類型看作是托管堆上的指針,而把native pointer看作是原生堆上的指針。

一個handle類型變量的默認值是nullptr。

通過gcnew關鍵字,你可以在托管堆上創建一個CLI對象,這樣的對象只能夠通過handle來訪問。例如:

R^ r1 = gcnew R; // Allocate an Object on the CLI heap

R^ r2 = r1;?? // Handles r1 and r2 refer to the same object

除非使用delete或者顯式調用一個CLI對象的析構函數,否則CLI對象的析構函數絕對不會被調用。但是,當程序結束的時候,GC會回收對象的內存,并且如果一個對象有finalizer,這個東西倒是會被調用。例如:

ref class T {

public :

??? T() { }

??? ~T() {

??????? System::Console::WriteLine("I'm destructor!"); }

??? !T() {

??????? System::Console::WriteLine("I'm finalizer!");

??? }

};

之后:

{

??????? T^ t1 = gcnew T();

}

會看到只有finalizer被調用了,而:

{

??????? delete t;

}

會看到析構函數被調用了。也就是說,對于一個托管對象,有2種清理方式。一種是通過析構函數進行確定性的清除;另一種是讓CLI調用類對象的finalizer。

l ???????? 和原生指針不同,handle類型的變量具有跟蹤功能,也就是說一個handle類型的變量可以根據其指向的CLI heap中對象的位置而改變(因為GC可能會移動托管堆中的對象)。也就是說:handle類型不能轉換成void*,也不能進行相反的轉換

l ???????? handle 類型不能轉換成整數類型,也不能進行相反的轉換

l ???????? 不能對handle類型進行排序

l ???????? Handle 類型的變量只能指向CLI heap中的對象

例如:

R^ r4 = new R;?

Object^ o = r4;// OK

R^ r5 = dynamic_cast(o); // OK r4 and r5 point to the same object

long l = reinterpret_cast<long>(r5); //error, can't convert to integer

R^ r6 = reinterpret_cast(l);??? // error, can't convert from integer

std::set s; // error, R^ can't be compared with less

所有指向同一個托管對象的引用都可以被看作是等價的,即使對象被GC移動了也是如此。一個handle可以有任意的生存周期。也可以被指定成nullptr。對于一個handle類型的變量,你也可以通過*來或得其指向的對象的引用。

Reference Type

一個原生引用可以被邦定到任何做為左值的原生變量(lvalue)上。

作為一個托管堆中的對象,由于GC有可能移動它的位置,因此它的位置必須被跟蹤。因此,對于這樣的對象的引用被稱為tracking reference%),由于存在gc-lvaluelvalue的隱式轉換,所以一個track reference可以既可以邦定到gc-lvalue,也可以邦定到lvalue。當其邦定到一個lvalue時,取其地址獲得的是一個原生指針,否則獲得的就是一個托管handle。例如:

R^ h = gcnew R; // allocate on CLI heap

R& r = *h;??? ? // bind tracking reference to ref class obj

void F(V% r);

F(*gcnew V);? // bind tracking reference to value class obj

N* p = new N();

N% rn = *p; ???// bind to native object;

和一個普通的引用一樣,一個tracking reference也是不可以重邦定的。一旦在聲明時被指定了對象,就不可以再進行更改。另外你也只可以把tracking reference類型的變量定義成automatic型的。

如果一個tracking reference被邦定到某個值類型的基類,那么這個tracking reference便不能邦定到這個派生的值類型。也就是說一個System::Object%不可以邦定到一個System::ValueType對象上。

?

posted on 2005-11-03 11:18 nacci 閱讀(2806) 評論(1)  編輯 收藏 引用

評論

# re: C++/CLI中的Handle和Reference小記 2008-02-18 10:46 dee

建議看看這篇文章對你會有幫助的 http://www.150it.cn/bianchengwendang/VC/865064948.html  回復  更多評論   

<2005年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

導航

統計

常用鏈接

留言簿(2)

隨筆分類

收藏夾

大家的聲音

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲男同1069视频| 欧美在线一二三区| 国产精品久久久久久户外露出 | 99热精品在线观看| 亚洲精品美女| 在线视频你懂得一区| 亚洲永久免费| 久久福利视频导航| 国产精品久久久久毛片大屁完整版| 欧美视频一区| 欧美激情精品久久久久久蜜臀 | 亚洲美女在线一区| 夜夜爽夜夜爽精品视频| 在线亚洲国产精品网站| 亚洲综合欧美| 老司机一区二区| 欧美日韩国产999| 国产精品自在欧美一区| …久久精品99久久香蕉国产| 亚洲欧洲一区| 午夜精品久久久久久久久久久久| 久久久夜夜夜| 日韩一级片网址| 久久看片网站| 国产精品美女久久福利网站| 91久久极品少妇xxxxⅹ软件| 亚洲欧美日韩久久精品| 欧美福利小视频| 亚洲欧美激情四射在线日| 免费高清在线视频一区·| 国产精品资源在线观看| 一本色道久久综合亚洲精品不| 久久国产精品99精品国产| 亚洲人成高清| 久久久久在线观看| 亚洲剧情一区二区| 欧美激情第六页| 亚洲视频免费看| 欧美一区在线视频| 欧美日韩一二三四五区| 激情久久五月| 欧美一区二区在线免费观看| 91久久久久久久久| 久久美女性网| 国产色产综合产在线视频| 亚洲视频在线看| 欧美成人一区二区三区在线观看| 亚洲小少妇裸体bbw| 欧美日本精品在线| 亚洲美女色禁图| 欧美韩日亚洲| 另类天堂视频在线观看| 亚洲午夜久久久| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲欧美一区二区在线观看| 久久色中文字幕| 国产一级一区二区| 性做久久久久久免费观看欧美| 精品不卡在线| 国产一区二区三区免费在线观看| 亚洲午夜影视影院在线观看| 亚洲激情二区| 欧美国产第一页| 亚洲精品三级| 亚洲黄色在线看| 欧美激情视频一区二区三区在线播放 | 亚洲狠狠婷婷| 蜜臀久久99精品久久久画质超高清 | 亚洲影视九九影院在线观看| 亚洲毛片播放| 欧美日韩在线观看视频| 亚洲午夜精品一区二区| 亚洲视频自拍偷拍| 国产亚洲福利一区| 久久香蕉国产线看观看av| 久久精品国产2020观看福利| 精品成人在线| 亚洲国产黄色| 欧美天天综合网| 久久精品国产99| 久久人体大胆视频| 99v久久综合狠狠综合久久| 亚洲理论电影网| 国产精品视频一| 免费看亚洲片| 欧美日韩八区| 久久久久国产免费免费| 美女国产一区| 亚洲香蕉视频| 欧美一区精品| 99re这里只有精品6| 午夜精品区一区二区三| 亚洲电影有码| 亚洲线精品一区二区三区八戒| 一区二区在线不卡| 99亚洲视频| 亚洲第一天堂无码专区| av72成人在线| 亚洲国产三级在线| 亚洲午夜高清视频| 亚洲经典在线| 久久激情婷婷| 先锋影音久久| 欧美激情第10页| 久久精品亚洲热| 欧美日韩精品三区| 美女视频网站黄色亚洲| 国产精品久久久久久久浪潮网站| 牛人盗摄一区二区三区视频| 国产精品久久久久久久久免费樱桃 | 99re66热这里只有精品3直播| 亚洲午夜极品| 亚洲狠狠婷婷| 午夜精品免费在线| 亚洲一区二区av电影| 欧美成人一品| 女女同性精品视频| 国产在线成人| 香蕉久久a毛片| 亚洲欧美日本国产有色| 欧美日本乱大交xxxxx| 欧美激情在线有限公司| 伊人久久综合97精品| 亚洲欧美日韩系列| 亚洲免费视频网站| 欧美日韩免费高清| 亚洲精品日韩久久| 亚洲免费福利视频| 欧美大香线蕉线伊人久久国产精品| 久久久久久电影| 国产一区二区三区四区五区美女 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 蜜臀av在线播放一区二区三区| 久久久91精品| 国产自产女人91一区在线观看| 亚洲一区二区成人在线观看| 亚洲一级黄色| 欧美系列精品| 亚洲女女做受ⅹxx高潮| 西瓜成人精品人成网站| 国产精品一国产精品k频道56| 亚洲视频在线观看网站| 亚洲欧美日韩精品久久| 国产区精品视频| 欧美一区二区在线| 榴莲视频成人在线观看| 亚洲电影自拍| 男同欧美伦乱| 亚洲美女中文字幕| 欧美一站二站| 亚洲动漫精品| 欧美日韩一区二区三区在线观看免 | 噜噜噜在线观看免费视频日韩| 欧美成人首页| 在线中文字幕一区| 国产日韩一区二区三区在线播放| 久久狠狠婷婷| 亚洲激情欧美| 亚洲欧美在线播放| 影音先锋中文字幕一区二区| 欧美国产精品中文字幕| 亚洲午夜久久久久久久久电影网| 久久久777| 亚洲精品久久久蜜桃| 欧美日韩一区二区三区四区在线观看| 亚洲女爱视频在线| 欧美黄色一区| 欧美亚洲免费电影| 欧美激情中文不卡| 亚洲专区在线视频| 欧美日韩精品综合在线| 99精品热6080yy久久| 久久国产精品久久久| 亚洲国产精品成人va在线观看| 欧美激情一区二区三区在线视频| 99国产精品99久久久久久粉嫩| 久久激情中文| 一区二区三区四区五区视频| 国产日韩精品一区二区三区在线| 老司机精品视频网站| 亚洲小说春色综合另类电影| 免费在线成人av| 午夜在线电影亚洲一区| 亚洲激情第一区| 国产午夜精品在线| 欧美大片免费看| 欧美一二三区精品| 亚洲人成绝费网站色www| 久久免费观看视频| 西瓜成人精品人成网站| 一区二区日韩欧美| 亚洲人久久久| 亚洲电影专区| 亚洲成人在线| 国产一区二区三区在线观看视频 | 久久精品一区二区三区中文字幕| 一区二区激情| 亚洲精选在线| 亚洲精品久久久一区二区三区| 久久亚洲国产成人|