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

牧光小院

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

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 閱讀(2811) 評論(1)  編輯 收藏 引用

評論

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

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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<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>
            国产精品久久7| 黄色av日韩| 亚洲视频一区在线观看| 欧美激情视频给我| 久久一区亚洲| 最新日韩av| 亚洲人www| 欧美区视频在线观看| 一区二区三区精品视频| 日韩视频精品| 国产精品丝袜久久久久久app| 亚洲视频一区二区在线观看| 在线亚洲免费视频| 国产欧美日本一区视频| 久久国产毛片| 麻豆精品精品国产自在97香蕉| 亚洲高清不卡av| 亚洲精选国产| 国产精品毛片大码女人| 久久米奇亚洲| 欧美二区在线观看| 亚洲女同精品视频| 欧美在线观看你懂的| 在线不卡免费欧美| 亚洲免费观看高清在线观看| 国产精品一级在线| 欧美激情国产日韩精品一区18| 欧美精品色一区二区三区| 午夜精品久久| 美女主播精品视频一二三四| 亚洲视频视频在线| 欧美在线影院| 亚洲一级影院| 久久久久久久一区二区三区| 一本色道久久精品| 久久精品国产99| 亚洲视频一区二区在线观看| 久久精品视频播放| 亚洲色图在线视频| 老司机成人在线视频| 亚洲在线视频| 欧美国产1区2区| 久久精品人人做人人爽| 欧美日韩福利视频| 卡通动漫国产精品| 国产精品美女久久久浪潮软件| 欧美高清视频在线播放| 国产精品伦一区| 亚洲日本中文字幕免费在线不卡| 国产亚洲精品aa午夜观看| 亚洲精品欧美精品| 亚洲电影中文字幕| 欧美在线999| 亚洲免费影视第一页| 欧美国产日本高清在线| 久久亚洲综合色一区二区三区| 欧美视频在线不卡| 亚洲高清毛片| 亚洲精品国产系列| 久久亚洲一区| 狼狼综合久久久久综合网| 国产一区日韩二区欧美三区| 亚洲香蕉网站| 亚洲女ⅴideoshd黑人| 欧美精品在线免费播放| 亚洲国产另类久久精品| 亚洲国产欧美在线人成| 老司机精品久久| 欧美国产精品人人做人人爱| 在线国产精品一区| 久久亚洲国产成人| 久久综合伊人| 亚洲国产精品一区二区www在线| 欧美一级黄色网| 久久精品国产99精品国产亚洲性色| 国产精品美女久久久久av超清| av成人免费观看| 亚洲欧美电影在线观看| 欧美性猛交99久久久久99按摩 | 亚洲人成网站999久久久综合| 久久久久久欧美| 牛人盗摄一区二区三区视频| 樱桃成人精品视频在线播放| 久久午夜av| 亚洲第一精品电影| av不卡在线观看| 国产精品国产精品| 欧美一级专区| 欧美成人国产一区二区| 最新国产精品拍自在线播放| 欧美激情第一页xxx| 亚洲精品视频在线看| 亚洲一区欧美二区| 国产亚洲激情在线| 老司机成人在线视频| 亚洲伦理在线观看| 欧美一区二区精品| 亚洲第一在线| 欧美日韩在线播| 欧美在线视频全部完| 亚洲国产精品一区二区久| 亚洲网友自拍| 精品成人a区在线观看| 欧美成人午夜激情| 亚洲一区二区三区四区中文| 久久久综合香蕉尹人综合网| 日韩午夜中文字幕| 国产伦精品一区二区三区视频黑人| 久久精品国产综合| 亚洲毛片在线免费观看| 久久久久在线观看| 在线视频精品| 在线播放日韩欧美| 国产精品久久福利| 久久这里只有| 午夜亚洲视频| 一本大道av伊人久久综合| 卡通动漫国产精品| 亚洲欧美另类国产| 99综合精品| 在线精品亚洲一区二区| 国产精品欧美激情| 欧美日韩精品免费| 久久午夜羞羞影院免费观看| 亚洲愉拍自拍另类高清精品| 亚洲国产一区二区精品专区| 久久久精品国产免费观看同学 | 欧美视频免费| 男女精品视频| 久久免费午夜影院| 先锋影音一区二区三区| 亚洲精品四区| 亚洲国产一区二区三区a毛片| 久久久99精品免费观看不卡| 亚洲视频电影在线| 99天天综合性| 亚洲精品一级| 亚洲破处大片| 91久久久久久久久久久久久| 国内精品久久久久影院优| 国产精品乱码| 国产精品午夜在线观看| 欧美日韩在线一二三| 欧美黄网免费在线观看| 欧美阿v一级看视频| 久久久999精品免费| 久久久久久噜噜噜久久久精品| 午夜精品一区二区三区在线 | 玖玖国产精品视频| 久久国产精品一区二区| 久久国产精品第一页| 欧美在线观看视频在线| 西西裸体人体做爰大胆久久久| 亚洲一区二区三区欧美| 亚洲综合国产| 先锋影音国产精品| 欧美一区二区免费观在线| 午夜精品国产| 久久精品99无色码中文字幕| 久久国产一区二区| 浪潮色综合久久天堂| 欧美 日韩 国产 一区| 欧美成人国产| 日韩手机在线导航| 亚洲视频你懂的| 性欧美大战久久久久久久久| 欧美中文字幕不卡| 老司机成人网| 欧美日韩三级在线| 欧美日韩1区2区3区| 国产精品黄色| 黄色精品网站| av不卡免费看| 欧美在线观看你懂的| 久久嫩草精品久久久精品一| 欧美成人影音| 99精品视频免费全部在线| 午夜精品福利在线观看| 久久蜜桃香蕉精品一区二区三区| 欧美电影电视剧在线观看| 国产精品狠色婷| 一区二区在线看| 一区二区三区久久| 久久精品国产精品亚洲精品| 欧美sm极限捆绑bd| 日韩一二在线观看| 欧美一区二区三区免费观看| 欧美国产第一页| 国产日韩欧美高清免费| 亚洲国产色一区| 欧美一区二区三区免费观看| 美女国产精品| 一区二区三区日韩精品视频| 久久激情综合| 国产精品嫩草99a| 亚洲激情精品| 久久久久久久久一区二区| 亚洲开发第一视频在线播放| 久久精品一区二区国产| 国产精品国产自产拍高清av王其 |