日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unique_ptr使用简介

發(fā)布時(shí)間:2023/12/10 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unique_ptr使用简介 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我們知道auto_ptr通過復(fù)制構(gòu)造或者通過=賦值后,原來的auto_ptr對(duì)象就報(bào)廢了.所有權(quán)轉(zhuǎn)移到新的對(duì)象中去了.而通過shared_ptr可以讓多個(gè)智能指針對(duì)象同時(shí)擁有某一塊內(nèi)存的訪問權(quán).但假如我們不希望多個(gè)內(nèi)存塊被多個(gè)智能指針對(duì)象共享,同時(shí)又不會(huì)像auto_ptr那樣不知不覺的就讓原來的auto_ptr對(duì)象失效,可咋整呢?

這個(gè)時(shí)候就要使用unique_ptr了,顧名思義嘛,unique是唯一的意思.說明它跟auto_ptr有點(diǎn)類似,就是同時(shí)只能有一個(gè)智能指針對(duì)象指向某塊內(nèi)存.但它還有些其他特性.

1.無法進(jìn)行復(fù)制構(gòu)造與賦值操作.

比如auto_ptr<int> ap(new int(88 );

??????auto_ptr<int> one (ap) ; // ok

????? auto_ptr<int> two = one; //ok

unique_ptr不支持上述操作

? unique_ptr<int> ap(new int(88 );

? unique_ptr<int> one (ap) ; // 會(huì)出錯(cuò)

? unique_ptr<int> two = one; //會(huì)出錯(cuò)

?

2.可以進(jìn)行移動(dòng)構(gòu)造和移動(dòng)賦值操作

就是像上面這樣一般意義上的復(fù)制構(gòu)造和賦值或出錯(cuò).但在函數(shù)中作為返回值卻可以用.

unique_ptr<int> GetVal( ){

unique_ptr<int> up(new int(88 );

return up;

}

?

unique_ptr<int> uPtr = GetVal();?? //ok

?

實(shí)際上上面的的操作有點(diǎn)類似于如下操作

unique_ptr<int> up(new int(88 );

unique_ptr<int> uPtr2 = std:move( up) ; //這里是顯式的所有權(quán)轉(zhuǎn)移. 把up所指的內(nèi)存轉(zhuǎn)給uPtr2了,而up不再擁有該內(nèi)存.另外注意如果你使用vs2008是沒有std:move這函數(shù)的.

//vs2010開始才有,是c++ 11標(biāo)準(zhǔn)出現(xiàn)的內(nèi)容.

?

?

3.可做為容器元素

我們知道auto_ptr不可做為容器元素.而unique_ptr也同樣不能直接做為容器元素,但可以通過一點(diǎn)間接的手段

例如:

unique_ptr<int> sp(new int(88) );

vector<unique_ptr<int> > vec;

vec.push_back(std::move(sp));

//vec.push_back( sp ); 這樣不行,會(huì)報(bào)錯(cuò)的.

//cout<<*sp<<endl;但這個(gè)也同樣出錯(cuò),說明sp添加到容器中之后,它自身報(bào)廢了.

?

總結(jié):

從上面的例子可以看出,unique_ptr和auto_ptr真的非常類似.其實(shí)你可以這樣簡(jiǎn)單的理解,auto_ptr是可以說你隨便賦值,但賦值完了之后原來的對(duì)象就不知不覺的報(bào)廢.搞得你莫名其妙.而unique就干脆不讓你可以隨便去復(fù)制,賦值.如果實(shí)在想傳個(gè)值就哪里,顯式的說明內(nèi)存轉(zhuǎn)移std:move一下.然后這樣傳值完了之后,之前的對(duì)象也同樣報(bào)廢了.只不過整個(gè)move你讓明顯的知道這樣操作后會(huì)導(dǎo)致之前的unique_ptr對(duì)象失效.

總結(jié)

以上是生活随笔為你收集整理的unique_ptr使用简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。