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

牧光小院

被約束的日日夜夜,停不下來的時(shí)間。

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

最近看了看C++/CLI specification。 的確,C++/CLI讓C++在使用.NET的時(shí)候手感好了很多,一點(diǎn)學(xué)習(xí)小記,說的不對,各位多包涵。


Handle Type

對于CLI中的任意一個(gè)類型TT^聲明了一個(gè)Thandle類型,它用來指向創(chuàng)建在CLI Heap上的對象。由于創(chuàng)建載托管堆上的對象的位置有可能被運(yùn)行時(shí)改變,因此,一個(gè)Handle類型可以動(dòng)態(tài)跟蹤其指向的對象。從某種意義上說,我們可以把Handle類型看作是托管堆上的指針,而把native pointer看作是原生堆上的指針。

一個(gè)handle類型變量的默認(rèn)值是nullptr

通過gcnew關(guān)鍵字,你可以在托管堆上創(chuàng)建一個(gè)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或者顯式調(diào)用一個(gè)CLI對象的析構(gòu)函數(shù),否則CLI對象的析構(gòu)函數(shù)絕對不會(huì)被調(diào)用。但是,當(dāng)程序結(jié)束的時(shí)候,GC會(huì)回收對象的內(nèi)存,并且如果一個(gè)對象有finalizer,這個(gè)東西倒是會(huì)被調(diào)用。例如:

ref class T {

public :

??? T() { }

??? ~T() {

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

??? !T() {

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

??? }

};

之后:

{

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

}

會(huì)看到只有finalizer被調(diào)用了,而:

{

??????? delete t;

}

會(huì)看到析構(gòu)函數(shù)被調(diào)用了。也就是說,對于一個(gè)托管對象,有2種清理方式。一種是通過析構(gòu)函數(shù)進(jìn)行確定性的清除;另一種是讓CLI調(diào)用類對象的finalizer

l ???????? 和原生指針不同,handle類型的變量具有跟蹤功能,也就是說一個(gè)handle類型的變量可以根據(jù)其指向的CLI heap中對象的位置而改變(因?yàn)?span lang="EN-US">GC可能會(huì)移動(dòng)托管堆中的對象)。也就是說:handle類型不能轉(zhuǎn)換成void*,也不能進(jìn)行相反的轉(zhuǎn)換

l ???????? handle 類型不能轉(zhuǎn)換成整數(shù)類型,也不能進(jìn)行相反的轉(zhuǎn)換

l ???????? 不能對handle類型進(jìn)行排序

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

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

Reference Type

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

作為一個(gè)托管堆中的對象,由于GC有可能移動(dòng)它的位置,因此它的位置必須被跟蹤。因此,對于這樣的對象的引用被稱為tracking reference%),由于存在gc-lvaluelvalue的隱式轉(zhuǎn)換,所以一個(gè)track reference可以既可以邦定到gc-lvalue,也可以邦定到lvalue。當(dāng)其邦定到一個(gè)lvalue時(shí),取其地址獲得的是一個(gè)原生指針,否則獲得的就是一個(gè)托管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;

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

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

?

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

評論

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

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿(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>
            久久久91精品| 国产三区二区一区久久| 日韩视频一区二区三区| 亚洲一级黄色| 国产在线精品一区二区中文| 裸体丰满少妇做受久久99精品| 欧美好吊妞视频| 一区二区三区视频免费在线观看 | 国产精品毛片a∨一区二区三区|国| 国产精品99久久久久久白浆小说 | 国产精品麻豆va在线播放| 亚洲欧美日韩中文在线制服| 裸体女人亚洲精品一区| 一本久久a久久免费精品不卡| 国产精品久久久久久一区二区三区| 欧美在线视频播放| 欧美激情精品久久久久| 午夜精品成人在线视频| 一区二区在线观看视频| 欧美日韩亚洲视频| 久久精品男女| 一区二区三区四区五区精品视频 | 国产欧美一区二区精品秋霞影院| 久久亚洲影音av资源网| 亚洲午夜av在线| 欧美国产日韩一区| 久久国产直播| 一区二区三区久久| 在线精品视频免费观看| 国产精品久久二区| 欧美国产亚洲视频| 久久久久久夜精品精品免费| 一区二区三区四区国产精品| 欧美成人性生活| 久久福利毛片| 亚洲一区视频在线观看视频| 在线观看欧美日本| 国产日韩欧美亚洲一区| 欧美日韩在线三级| 欧美www视频| 久久久久久亚洲精品中文字幕 | 欧美激情一区二区| 久久久精品国产一区二区三区 | 欧美肥婆bbw| 久久成人人人人精品欧| 一区二区黄色| 亚洲毛片av| 亚洲国产成人在线视频| 久久伊人亚洲| 久久久久一区| 久久成人免费| 欧美在线一二三| 亚洲综合成人婷婷小说| 中国女人久久久| 99视频国产精品免费观看| 亚洲国产精品久久精品怡红院| 国自产拍偷拍福利精品免费一| 国产精品视频99| 国产精品久久久久久久一区探花| 欧美日韩亚洲一区二区三区在线| 欧美大尺度在线| 欧美二区乱c少妇| 欧美不卡视频一区| 欧美国产第一页| 欧美刺激午夜性久久久久久久| 老鸭窝毛片一区二区三区| 久久综合99re88久久爱| 麻豆成人在线播放| 欧美大胆成人| 欧美日本韩国一区| 欧美视频在线观看一区二区| 欧美日韩精品免费观看视频| 欧美日韩综合精品| 国产乱码精品一区二区三区忘忧草 | 国产亚洲精品久久飘花 | 欧美一区二区视频免费观看| 欧美一级网站| 久久亚洲影院| 欧美二区在线播放| 91久久精品国产91性色| 亚洲精品之草原avav久久| 日韩视频在线免费观看| 一区二区冒白浆视频| 亚洲欧美bt| 久久久久久久97| 久久精品国产第一区二区三区最新章节| 亚洲一区二区视频| 亚洲欧美日韩精品综合在线观看| 亚洲欧美日韩在线不卡| 欧美一区二区视频观看视频| 久久频这里精品99香蕉| 欧美黄色一区| 在线亚洲欧美视频| 久久精品免费电影| 欧美精品亚洲二区| 国产区精品在线观看| 在线观看亚洲视频| 亚洲视频观看| 久久影音先锋| 日韩午夜在线电影| 久久gogo国模裸体人体| 欧美精品www在线观看| 国产精品成人观看视频国产奇米| 国产精品一区二区三区乱码| 亚洲国产精品黑人久久久| 亚洲一区二区精品视频| 久久综合国产精品台湾中文娱乐网| 亚洲国产精品毛片| 亚洲男女自偷自拍| 欧美刺激午夜性久久久久久久| 国产精品实拍| 日韩视频在线观看| 久久久欧美精品| 一本久道久久久| 久久综合成人精品亚洲另类欧美| 国产精品久久精品日日| 亚洲国产精品久久久久秋霞蜜臀| 亚洲免费一级电影| 久久国产综合精品| 欧美一级片在线播放| 久久综合一区二区| 宅男精品导航| 欧美大片免费观看在线观看网站推荐| 国产精品久久久久aaaa| 亚洲精选一区二区| 久久一区国产| 亚洲欧美美女| 欧美视频精品一区| 亚洲精品免费在线播放| 久久久久久综合| 亚洲视频香蕉人妖| 欧美成人精品福利| 在线成人性视频| 久久国产直播| 一区电影在线观看| 欧美 日韩 国产 一区| 国产精品一区二区在线| 亚洲午夜伦理| 亚洲九九九在线观看| 久久综合伊人77777蜜臀| 国产精品系列在线| 亚洲综合大片69999| 99国产精品久久久| 欧美久久久久中文字幕| 亚洲人www| 欧美电影免费观看网站| 久久久久久自在自线| 欧美一级午夜免费电影| 亚洲激情第一区| 欧美一区二区在线播放| 国产精品久久久一区二区三区| 老牛影视一区二区三区| 亚洲精品一区二区三区av| 最新国产成人在线观看| 99re6热在线精品视频播放速度| 欧美黄色免费网站| 91久久国产自产拍夜夜嗨| 久久久亚洲一区| 一区在线视频观看| 久久久一区二区| 欧美资源在线| 在线观看91久久久久久| 久久一区二区三区av| 久久久999成人| 在线看日韩欧美| 欧美成人综合在线| 欧美国产日产韩国视频| 99国产精品久久| 一本色道久久88亚洲综合88| 国产精品卡一卡二| 欧美视频第二页| 先锋影音国产精品| 性做久久久久久久免费看| 韩日成人在线| 欧美国产免费| 欧美日韩另类综合| 欧美一级久久久久久久大片| 欧美诱惑福利视频| 亚洲国产精品va在线观看黑人| 欧美激情第一页xxx| 欧美日韩一区二区在线| 性欧美video另类hd性玩具| 久久国产精彩视频| 亚洲日本成人网| 亚洲一区免费观看| 一区在线观看| 99精品福利视频| 国产一区二区三区视频在线观看| 欧美福利一区二区三区| 欧美日韩国产一区二区| 欧美中文字幕在线观看| 开心色5月久久精品| 亚洲伊人网站| 久久精品国产96久久久香蕉| 日韩视频欧美视频| 欧美一区二区三区喷汁尤物| 亚洲伦理一区| 欧美在线视频不卡| av成人免费在线| 久久激情一区|