c++ shared_ptr 构造
时间: 2023-09-07 13:18:01 浏览: 108
shared_ptr是C++中的智能指针,用于管理动态分配的内存。它可以自动地跟踪共享所有权并在不再需要时自动地释放内存。在构造shared_ptr时,我们可以使用weak_ptr或shared_ptr来初始化。其中,weak_ptr是一种弱引用,它不会增加引用计数,也不会阻止对象的析构。而shared_ptr是一种强引用,它会增加引用计数,并在引用计数为0时删除所管理的对象。
对于第一个引用中的代码,A类和B类之间的引用关系使用了weak_ptr来实现。这是因为如果使用shared_ptr,A和B互相持有shared_ptr的引用,会导致循环引用,无法正确地析构对象。
而第二个引用中的代码展示了一个错误的用法。在Demo类中,使用了shared_ptr来持有自身的引用。这样会导致对象无法正确地析构,因为对象的引用计数永远不会变为0。为了解决这个问题,我们应该使用weak_ptr来持有自身的引用。
最后一个引用中的代码展示了正常使用shared_ptr的情况。A类和B类之间的引用关系都使用了shared_ptr,这样可以正确地管理对象的生命周期,避免内存泄漏。
总之,当构造shared_ptr时,应该根据具体的需求选择使用weak_ptr还是shared_ptr来管理对象之间的引用关系。使用weak_ptr来避免循环引用,使用shared_ptr来建立强引用关系并正确管理对象的生命周期。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解](https://blog.csdn.net/chenlycly/article/details/130918547)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [C++ shared_ptr 、weak_ptr具体实现分析](https://blog.csdn.net/zzZhangYiLong/article/details/126696214)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文