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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ smart pointer 趣谈

發布時間:2025/3/21 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ smart pointer 趣谈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

上班的時候同事問起我一段項目中的舊代碼,大致如下

void foobar() {// some code herechar* buffer = new char[length];std::auto_ptr<char> useless(buffer);// more code using 'buffer' here }

這段代碼這樣寫的目的是:

  • buffer在超出scope(這里是函數foobar)時會自動釋放,防止內存泄露,因為在后面的代碼中有可能會提早返回或者拋出異常。
  • 后面在使用buffer的時候可以當成普通指針一樣使用,避免了調用auto_ptr.get函數,只要不手動delete它

然后又給他講了一些C++其他智能指針的用法,在給他解釋的過程中,發現可以用一種有趣的方式來解釋,即比喻。

?

我們將智能指針比作一個個性格迥異的人,智能指針里面的原始指針比作藏寶圖,而原始指針指向的資源(內存,句柄,COM對象等等)比作寶藏。

?

scoped_ptr(from boost)

scoped_ptr是一個極度自私的人,自個獨享藏寶圖,不懂得怎么去分享或者傳給后人,自己死了之后就會把寶藏毀掉,不想落入他人之手。

?

unique_ptr

unique_ptr稍微好點,他在自己死之前會把藏寶圖傳給自己的繼承人,然后就這樣代代相傳。

?

auto_ptr

auto_ptr雖然看起來像是復印一份藏寶圖給繼承人,但是私底下干的卻是傳遞的勾當,即不復印,只傳遞,傳遞之后自己就沒有藏寶圖了。

?

shared_ptr

唯一懂得共享寶藏的人就數shared_ptr了,多個shared_ptr共享寶藏,沒有任何一個擁有絕對的所有權。而每一個shared_ptr都知道除了自己之外還有多少個shared_ptr共享這份寶藏。所以當一個shared_ptr死了之后,其他人都知道。那如果死的是共享寶藏的最后一個人,他才會把寶藏毀掉。

?

而在C++的世界中,需要各種性格的人,各有各的用處,哪怕是自私的人。所以像scoped_ptr這樣的人也還算受歡迎,大家有時候就喜歡他的這份自私的品質。

但是表里不一的人在C++是不受歡迎的。曾經還沒有unique_ptr的時候,大家還覺得auto_ptr很有用。自從unique_ptr誕生后,由于auto_ptr和unique_ptr都差不多,但是由于他說一套做一套,于是大家都建議不要去招惹他。

當然,我們不要忘了給好好先生shared_ptr發張好人卡。

?

暫時寫到這里吧,估計知道各種智能指針的人都不知道我在講些什么。

轉載于:https://www.cnblogs.com/jianqifeihong/p/3520042.html

總結

以上是生活随笔為你收集整理的c++ smart pointer 趣谈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。