weak ptr的一點認識

2021-06-06 22:58:06 字數 830 閱讀 4854

近期在補充和梳理c++方面的知識的時候,遇到了weakptr這個概念和用法,不甚明白,google出了一堆文字,包括boost的shared_ptr和weak_ptr的比較,以及其他一些部落格裡面給的例子以及解釋。

其中有乙個是這樣解釋的,原文大意:在c++的weak_ptr裡面,有兩類指標,一類是擁有物件的生命週期;另一類不擁有,只有訪問權。

在這裡,我就有點不明白,這兩類指標,到底會在編寫上面,或者形式上面,有什麼區別呢?

或者說weak_ptr到底要解決程式設計當中的什麼問題呢? 為什麼會有這個型別被提出?

經過和一位朋友的討論,有了答案。

比如現在有兩個函式

class a;

void func1(a* a);

void func2(a* a);

a* a = new a;

func1(a);

func2(a);

他們在同乙個作用域的時候,a 被釋放後,慣有的操作是 a = null這個時候func2 或者 func1中都可以判斷到這個變化。

但是如果func1在另外乙個執行緒/程序裡面,你在傳遞過來的時候a並不是空的a,但是指向的物件,已經被釋放了,這個指標已經不在有許可權去訪問了。那麼就會出現問題。

所以weak_ptr就出現了,讓你在使用資源之前,先去問下hasweakptr() 如果有,那麼表明這個資源還沒有被釋放,可以放心去用,否則就應該不能再使用了。

以往的**,寫法: if (a) {}

但是*a 已經被釋放之後,其實a並沒有在上下文被a  = null 所以a 還是指向那個位址,但是位址指向的內容已經非法了。

一點點小認識,希望對於大家對weak_ptr的理解有所幫助。

SLAM的一點認識

那會兒確確實實學習到了很多技能,但對slam的理解還是不是那麼透徹。後來因為被叫去做其他專案,就沒有再接著往下研究了。下面附一下lsd slam的相關 感興趣的朋友可以去關注一下。lsd slam的主頁 github 隨著專案的需要,以及視覺幾何知識的積累,現在需要用到目前更高效 更便於二次開發的最...

SLAM的一點認識

那會兒確確實實學習到了很多技能,但對slam的理解還是不是那麼透徹。後來因為被叫去做其他專案,就沒有再接著往下研究了。下面附一下lsd slam的相關 感興趣的朋友可以去關注一下。lsd slam的主頁 github 隨著專案的需要,以及視覺幾何知識的積累,現在需要用到目前更高效 更便於二次開發的最...

對暴庫的一點認識

去年的時候曾經有一段時間研究過ie雙解碼,所以對暴庫有一定的認識,前些天終於收到黑客的雜誌,裡面看了一篇臨的文章,下面我也談談個人對那篇文章的認識,這裡要說的是,大家如果再深入點研 究下去,就會發現,暴庫的利用不只是這麼簡單,還會有更多可以用的東東。暴庫的方式有多種多樣,我知道的就有3種以上,常見的...