std::shared_ptr 实现
时间: 2023-08-17 14:11:45 浏览: 120
std::shared_ptr是C++中的智能指针,用于管理动态分配的内存。它通过引用计数的方式来跟踪有多少个shared_ptr共享同一个对象。当最后一个shared_ptr离开作用域或被显式地重置时,引用计数减少并且在没有其他shared_ptr引用该对象时,内存会被自动释放。
std::shared_ptr可以通过以下几种方式进行赋值:
1. 拷贝赋值:将一个shared_ptr赋值给另一个shared_ptr,这会增加引用计数。例如,foo = bar;
2. 移动赋值:使用std::move将一个unique_ptr转移到一个shared_ptr中,这会转移所有权并且不会增加引用计数。例如,foo = std::move(unique);
3. 使用std::make_shared创建shared_ptr:std::make_shared是一个模板函数,用于在堆上创建对象并返回一个shared_ptr。它可以接受任意数量的参数,并将它们传递给对象的构造函数。例如,std::shared_ptr<int> foo = std::make_shared<int>(10);
使用shared_ptr可以避免内存泄漏和悬空指针的问题,因为它会自动管理内存的释放。同时,shared_ptr还提供了其他成员函数,如get()用于获取指向对象的原始指针,use_count()用于获取当前引用计数的值等。
总结起来,std::shared_ptr是一种智能指针,用于管理动态分配的内存。它可以通过拷贝赋值、移动赋值和std::make_shared等方式进行赋值。它的引用计数机制可以确保内存的正确释放。
#### 引用[.reference_title]
- *1* *2* [std::shared_ptr 详解](https://blog.csdn.net/baidu_31541363/article/details/95802210)[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^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [shared_ptr代码实现](https://blog.csdn.net/weixin_43246170/article/details/121339985)[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^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文