对于enable_shared_from_this、shared_from_this使用笔记
文章為轉(zhuǎn)載+匯總
參考:C++11標(biāo)準(zhǔn)庫(kù)的一個(gè)工具類enable_shared_from_this的作用及原理分析
從這篇文章中可以知道:
當(dāng)一個(gè)類public繼承enable_shared_from_this時(shí),會(huì)獲得一個(gè)共有方法shared_from_this:
這個(gè)東西的引入是為了解決下面的這個(gè)問題:
某個(gè)類的對(duì)象內(nèi)存的生命周期由智能指針來管理,此時(shí)要在一個(gè)類的成員函數(shù)中,對(duì)外部返回shared_ptr構(gòu)造的this指針會(huì)有問題。注意這里返回原生的this指針是可以的。
核心的問題,就是:
- 如果采用返回拷貝,那么臨時(shí)變量會(huì)把this析構(gòu)掉
- 如果采用返回引用,那么obj對(duì)象本身必須持有一個(gè)管理他的shared_ptr,這樣會(huì)導(dǎo)致obj永遠(yuǎn)不會(huì)被釋放
可用的解決方案有以下兩種
注意:當(dāng)你想使用getSharedFromThis時(shí),必須以智能指針構(gòu)造,而非以raw指針形式。否則會(huì)報(bào)std::bad_weak_ptr的錯(cuò)
int main() {auto p =std::make_shared<obj>();// auto p = new obj();p->getSharedFromThis()->doSomething(); }enable_shared_from_this類中使用了一個(gè)私有weak_ptr來保存地址,在shared_from_this()通過把這個(gè)weak_ptr轉(zhuǎn)換為引用計(jì)數(shù)為1的shared_ptr返回,避免了臨時(shí)shared_ptr析構(gòu)導(dǎo)致this被delete。
總結(jié)
以上是生活随笔為你收集整理的对于enable_shared_from_this、shared_from_this使用笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++智能指针使用指南 part2:智能
- 下一篇: get\post常用参数使用说明