对于enable_shared_from_this、shared_from_this使用笔记
生活随笔
收集整理的這篇文章主要介紹了
对于enable_shared_from_this、shared_from_this使用笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章為轉載+匯總
參考:C++11標準庫的一個工具類enable_shared_from_this的作用及原理分析
從這篇文章中可以知道:
當一個類public繼承enable_shared_from_this時,會獲得一個共有方法shared_from_this:
這個東西的引入是為了解決下面的這個問題:
某個類的對象內存的生命周期由智能指針來管理,此時要在一個類的成員函數中,對外部返回shared_ptr構造的this指針會有問題。注意這里返回原生的this指針是可以的。
核心的問題,就是:
- 如果采用返回拷貝,那么臨時變量會把this析構掉
- 如果采用返回引用,那么obj對象本身必須持有一個管理他的shared_ptr,這樣會導致obj永遠不會被釋放
可用的解決方案有以下兩種
注意:當你想使用getSharedFromThis時,必須以智能指針構造,而非以raw指針形式。否則會報std::bad_weak_ptr的錯
int main() {auto p =std::make_shared<obj>();// auto p = new obj();p->getSharedFromThis()->doSomething(); }enable_shared_from_this類中使用了一個私有weak_ptr來保存地址,在shared_from_this()通過把這個weak_ptr轉換為引用計數為1的shared_ptr返回,避免了臨時shared_ptr析構導致this被delete。
總結
以上是生活随笔為你收集整理的对于enable_shared_from_this、shared_from_this使用笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++智能指针使用指南 part2:智能
- 下一篇: “高会日挥金”上一句是什么