shared_ptr原理分析
时间: 2023-07-29 14:06:53 浏览: 113
shared_ptr是C++11中引入的智能指针,用于管理动态分配的对象。它的原理是通过引用计数来跟踪对象的所有者数量,并在没有所有者时自动释放对象的内存。
具体来说,shared_ptr内部包含一个指向对象的指针和一个指向引用计数的指针。当一个shared_ptr对象被创建时,引用计数初始化为1。当其他shared_ptr对象拷贝或赋值给它时,引用计数会增加。当一个shared_ptr对象被销毁或重新赋值时,引用计数会减少。当引用计数变为0时,shared_ptr会自动释放对象的内存。
在引用\[1\]中的代码示例中,可以看到shared_ptr的使用。在类Shared中,m_weak_ptr_this是一个weak_ptr指针,它可以通过shared_ptr进行初始化和赋值。在main函数中,ptr1和ptr2都是shared_ptr对象,它们分别引用了同一个Shared对象。通过使用shared_ptr给m_weak_ptr_this赋值,可以将weak_ptr提升为shared_ptr。
引用\[2\]中提到了enable_shared_from_this模板类,它通过一个weak_ptr指针作为中间体来实现shared_ptr的返回。在需要返回shared_ptr的函数内部,可以使用lock()函数将weak_ptr提升为shared_ptr。
总结来说,shared_ptr的原理是通过引用计数来管理对象的所有权,并在没有所有者时自动释放对象的内存。它可以通过shared_ptr的拷贝、赋值和使用enable_shared_from_this模板类来实现shared_ptr的创建和提升。
#### 引用[.reference_title]
- *1* *2* [C++关于shared_ptr和shared_from_this的说明](https://blog.csdn.net/weixin_38331755/article/details/131026522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [C++2.0 shared_ptr和weak_ptr深入刨析](https://blog.csdn.net/qq_41540355/article/details/123123404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文