C++ shared指针
时间: 2023-10-10 09:06:54 浏览: 38
C++ shared_ptr 是 C++11 引入的智能指针,它是一种模板类,用于管理动态分配的内存资源。当多个 shared_ptr 指向同一个对象时,它们共享该对象的内存资源,每个 shared_ptr 维护一个计数器,用来记录有多少个 shared_ptr 指向该对象,当计数器为 0 时,该对象的内存资源会被释放。
shared_ptr 的使用非常简单,可以通过 std::make_shared 或者直接使用构造函数来创建 shared_ptr 对象,如下所示:
```c++
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> p1 = std::make_shared<int>(10); // 创建一个 shared_ptr,指向整型变量 10
std::shared_ptr<int> p2(p1); // p2 和 p1 指向同一个对象
std::cout << *p1 << " " << *p2 << std::endl; // 输出 10 10
p1.reset(); // p1 不再指向该对象,计数器减 1
std::cout << *p2 << std::endl; // 输出 10
return 0;
}
```
需要注意的是,shared_ptr 的循环引用会导致内存泄漏,因此在使用 shared_ptr 时需要注意循环引用的情况。如果需要解决循环引用的问题,可以使用 weak_ptr 来实现弱引用。
相关问题
C++ 智能指针 shared_ptr释放
shared_ptr是C++中的智能指针,它采用引用计数的方法来实现释放指针所指向的资源。当使用shared_ptr时,它会记录有多少个shared_ptr指向同一个对象,只有当最后一个shared_ptr被销毁时,该对象的内存才会被释放。因此,shared_ptr可以自动管理内存,不需要手动释放。
在代码中,使用shared_ptr可以像普通指针一样操作对象。当需要创建一个shared_ptr对象时,可以使用std::make_shared函数来构造,如下所示:
```
std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(10);
```
可以通过将shared_ptr赋值给其他shared_ptr来共享资源,如下所示:
```
std::shared_ptr<int> sharedPtr2 = sharedPtr1;
```
当所有的shared_ptr都被销毁时,内存会自动释放。可以使用use_count()函数获取shared_ptr的引用计数,如下所示:
```
std::cout << "sharedPtr2 use count: " << sharedPtr2.use_count() << std::endl;
```
当引用计数为0时,内存会被自动释放。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [C++智能指针shared_ptr分析](https://download.csdn.net/download/weixin_38705004/13788082)[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_2"}}] [.reference_item style="max-width: 50%"]
- *2* *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_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
c++ 智能指针shared_ptr char 数组指针
智能指针shared_ptr可以用于管理C++中的char数组指针。使用shared_ptr可以确保在不再需要使用char数组指针时,自动释放内存,省去了手动删除的烦恼。你可以使用shared_ptr的make_shared函数来创建一个shared_ptr对象,指向一个char数组指针。例如,你可以这样定义一个shared_ptr对象p,指向一个长度为10的char数组指针:
```cpp
shared_ptr<char[]> p = make_shared<char[]>(10);
```
这样,当p不再被使用时,它所指向的char数组指针将会自动被释放。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [C++智能指针shared_ptr](https://blog.csdn.net/qq_51447496/article/details/128306172)[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_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]