樓主 hma
(if you think you can, you can.)
☆─────────────────────────────────────☆
panrainbow (憂鬱淡藍) 於 (tue nov 9 11:48:38 2010) 提到:
引入enable_shared_from_this的原因是可以實現返回值為指向該類本身的
shared_ptr,為什麼以this為拷貝構造函式引數不能完成引用計數的累加,而是用
weak_ptr卻可以呢?
謝謝!☆─────────────────────────────────────☆
xiaoman (比目魚) 於 (tue nov 9 12:16:25 2010) 提到:
enable_shared_from_this其實是乙個簡單的class,其內部包含指向自己的weak_ptr
加上enable_shared_from_this以後,其實是用了多重繼承,
而且這個多重是有成員變數的(不是很好的習慣)
至於你說的問題,不明白「以this為拷貝構造函式引數不能完成引用計數的累加」
放乙個簡單**上來看看
【 在 panrainbow (憂鬱淡藍) 的大作中提到: 】
: 引入enable_shared_from_this的原因是可以實現返回值為指向該類本身的
: shared_ptr,為什麼以this為拷貝構造函式引數不能完成引用計數的累加,而是用
: weak_ptr卻可以呢?
: ...................
☆─────────────────────────────────────☆
panrainbow (憂鬱淡藍) 於 (tue nov 9 12:28:13 2010) 提到:
//可以實現引用計數累加
shared_ptrshared_from_this()
//不能實現引用計數累加
shared_ptrshared_from_this()
請問這是為什麼?
【 在 xiaoman (比目魚) 的大作中提到: 】
: enable_shared_from_this其實是乙個簡單的class,其內部包含指向自己的
weak_ptr
: 加上enable_shared_from_this以後,其實是用了多重繼承,
: 而且這個多重是有成員變數的(不是很好的習慣)
: ...................
☆─────────────────────────────────────☆
xiaoman (比目魚) 於 (tue nov 9 12:58:41 2010) 提到:
第2種寫法是錯的。這種特性是由shared_ptr的建構函式決定的,
可以這麼理解:
如果shared_ptr通過裸指標t*來構造,那麼代表的是這個shared_ptr完全擁有它,
如果看進去相應的建構函式可以看到會new乙個新的計數器結構體,
之後的結果就是對this至少多delete一次
簡單**可以這麼描述:
template class shared_ptr;
...private: t* px; ///raw pointer
ref_pn* pn; /// ref count struct
}如果用weak_ptr構造,能工作是因為shared_ptr寫了乙個特殊建構函式,
接受從weak_ptr構造自己,
這個特殊建構函式會從weak_ptr裡找到引用計數結構體,並增加計數。
public:
shared_ptr(weak_ptrpw)
【 在 panrainbow (憂鬱淡藍) 的大作中提到: 】
: //可以實現引用計數累加
: shared_ptrshared_from_this()
: {: ...................
☆─────────────────────────────────────☆
xiaoman (比目魚) 於 (tue nov 9 13:02:41 2010) 提到:
剛才偽**寫得有些問題,更新了
【 在 xiaoman (比目魚) 的大作中提到: 】
: 第2種寫法是錯的。這種特性是由shared_ptr的建構函式決定的,
: 可以這麼理解:
: 如果shared_ptr通過裸指標t*來構造,那麼代表的是這個shared_ptr完全擁有它,
: ...................
☆─────────────────────────────────────☆
panrainbow (憂鬱淡藍) 於 (tue nov 9 13:55:42 2010) 提到:
明白了,謝謝前輩指教
【 在 xiaoman (比目魚) 的大作中提到: 】
: 剛才偽**寫得有些問題,更新了
為什麼要用補碼
在探求為何機器要使用補碼之前,讓我們先了解原碼,反碼和補碼的概念.對於乙個數,計算機要使用一定的編碼方式進行儲存.原碼,反碼,補碼是機器儲存乙個具體數字的編碼方式.原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 原 1000 ...
為什麼要用AndroidStudio
原因一 android studio是基於intellij idea開發的,所以android studio繼承了intellij idea的所有功能.原因二 android studio是谷歌開發的,專門用於android開發的編輯器,換句話說是親兒子,谷歌會把所有好吃的好用的先給親兒子.原因三 ...
為什麼要用Handler
一 什麼是handler?注 執行緒分為主線程 主線程又叫ui執行緒,只能有乙個主線程 和子執行緒 可以有多個 handler只能在主線程裡執行 handler是android給我們提供用來更新ui的一套機制,也是一套訊息處理機制,我們可以發訊息,也可以通過它 處理訊息。二 為什麼要用handle?...