今天除錯的時候發現了乙個bug:a物件的func(),在呼叫第二次的時候就崩潰了。
單步發現第二次呼叫之前,a物件已經被析構。再向前找,發現在func()內部建立了乙個指向this的智慧型指標p:「boost::shared_ptrp(this)」,這是完全錯誤的用法。
由於在func()出棧的時候p的ref count就已經沒有了,boost會幫我delete掉this,而這明顯不是我所期望的。
其實boost提供了專門為this設計的shared_ptr,用法如下(抄自網路):
#include
classy:
public
boost
::enable_shared_from_this
<
y>
}int
main
()
需要this智慧型指標時,把該類繼承於public
boost::enable_shared_from_this<
t>,然後在需要shared_ptr的地方呼叫shared_from_this()。
源於:
智慧型指標 強弱智慧型指標
在平時編寫 的時候經常會用到new來開闢空間,而我們開闢出來的空間必須得手動去delete他,但是如果程式設計師忘記去手動釋放那邊會出現乙個麻煩的問題,記憶體洩漏!或者是一塊記憶體被多個函式同時使用時,如果其中乙個函式不知道還有其他人也在使用這塊記憶體而釋放掉的話同樣也會引起程式的崩潰。引起記憶體洩...
智慧型指標(二)智慧型指標的方法和構造
預設構造shared ptrsp和unique ptrup 指標構造shared ptrsp t 和unique ptrup t 這裡預設為explicit 帶刪除器的構造shared ptrp q,d q這裡可以內建指標和智慧型指標,同時將用d析構器代替delete。所以定義了這麼乙個帶刪除器的建...
c 智慧型指標的問題 智慧型指標初探(一)
為什麼要有智慧型指標 在c 中,動態記憶體的管理一般是用一對運算子完成的 new和delete。new 在動態記憶體中為物件分配一塊空間並返回乙個指向該物件的指標。delete 指向乙個動態獨享的指標,銷毀物件,並釋放與之關聯的記憶體。使用new和delete動態記憶體管理經常會出現問題 忘記釋放記...