近期在補充和梳理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種以上,常見的...