為啥unique_ptr比auto_ptr好?

即便通過(guò)上述策略2把兩次delete同一對(duì)象空間的錯(cuò)誤搞定了,但是萬(wàn)一程序又使用了先前的,已經(jīng)沒(méi)有對(duì)象空間所有權(quán)的智能指針,還會(huì)引起未定義行為,因?yàn)樗赶蛄艘粋€(gè)非法數(shù)據(jù)。當(dāng)然這是針對(duì)auto_ptr而言的。
對(duì)于unique_ptr而言,它就好像是引用,它只能指向某一特定對(duì)象,它一旦指向某一對(duì)象別的unique_ptr就無(wú)法再指向該對(duì)象了,從而避免了兩次delete和使用無(wú)效智能指針的錯(cuò)誤。
Unique_ptr不允許兩個(gè)同作用域,同生存期的指針互相賦值,但是它允許把一個(gè)臨時(shí)性的unique_ptr指針賦給一個(gè)非臨時(shí)性的unique_ptr指針。我想這也是為了保證只有一個(gè)unique_ptr指針能指向某一特定對(duì)象吧,因?yàn)榕R時(shí)性的unique_ptr使完了就沒(méi)了,它不會(huì)干擾干擾外部作用域的unique_ptr指針。至于說(shuō)這對(duì)于容器有好處,我還真沒(méi)想到具體好處是啥。
兩個(gè)同作用域同生存期的unique_ptr指針互相賦值可以使用move函數(shù),如下圖所示:



此外,unique_ptr還可以用于數(shù)組空間的分配,它會(huì)自動(dòng)調(diào)用delete[]進(jìn)行空間的釋放,如下圖所示:



在使用new進(jìn)行空間分配時(shí),你可以使用auto_ptr和shared_ptr,但是它倆不能用于new[]。
針對(duì)不使用new分配的空間,你也不能使用auto_ptr、shared_ptr和unique_ptr。
針對(duì)不使用new和new[]的情況,你不可以使用unique_ptr。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容