c++shared_ptr用法
时间: 2023-11-26 22:03:14 浏览: 81
shared_ptr是C++11标准库中提供的智能指针之一,用于管理动态分配的对象,它可以自动释放所管理的对象,并且可以跟踪对象的引用计数。
使用shared_ptr可以避免内存泄漏和野指针的问题。下面是shared_ptr的基本用法:
1. 创建shared_ptr对象:
```cpp
#include <memory>
std::shared_ptr<int> ptr(new int(10));
```
2. 使用shared_ptr对象:
```cpp
int value = *ptr; // 解引用获取所指向的对象
```
3. 多个shared_ptr共享同一个对象:
```cpp
std::shared_ptr<int> ptr1 = std::make_shared<int>(10);
std::shared_ptr<int> ptr2 = ptr1; // 多个shared_ptr共享同一个对象
```
4. 获取引用计数:
```cpp
int count = ptr.use_count(); // 获取当前对象的引用计数
```
5. 释放对象:
```cpp
ptr.reset(); // 手动释放对象,引用计数减一
```
相关问题
c++ shared_ptr获取他指向的内存
C++中的shared_ptr是一种智能指针,它可以自动管理动态分配的内存。要获取shared_ptr指向的内存,可以使用其get()方法,该方法返回一个指向所管理对象的指针。需要注意的是,当shared_ptr被销毁时,它所管理的内存也会被自动释放,因此在使用get()方法获取指向所管理对象的指针时,需要确保shared_ptr对象仍然存在,否则可能会导致访问已释放的内存。另外,建议尽量避免直接使用get()方法获取指向所管理对象的指针,而是应该使用shared_ptr提供的其他方法来操作所管理的对象,以确保内存的安全性和正确性。
什么是C++的unique_ptr shared_ptr weak_ptr
在C++中,`unique_ptr`、`shared_ptr`、`weak_ptr`是三种常用的智能指针,用于管理动态分配的内存,避免内存泄漏和悬空指针等问题。
1. `unique_ptr`:是一种独占式智能指针,表示一个对象的所有权只能被一个`unique_ptr`持有,不能被其他指针或引用所共享。当`unique_ptr`超出作用域或被显式释放时,它所指向的对象将被自动销毁。例如:
```cpp
std::unique_ptr<int> p(new int(10));
```
2. `shared_ptr`:是一种共享式智能指针,表示一个对象的所有权可以被多个`shared_ptr`共享。每个`shared_ptr`维护一个引用计数器,当引用计数器变为0时,它所指向的对象将被自动销毁。`shared_ptr`还支持自定义删除器,可以在对象销毁时执行特定的操作。例如:
```cpp
std::shared_ptr<int> p = std::make_shared<int>(10);
std::shared_ptr<int> q = p;
```
3. `weak_ptr`:是一种弱引用智能指针,不能直接访问所指向的对象,只能通过调用`lock()`方法获得一个指向所指对象的`shared_ptr`。当`weak_ptr`所指向的对象已经被销毁时,`lock()`方法将返回一个空的`shared_ptr`。`weak_ptr`主要用于解决`shared_ptr`的循环引用问题,避免内存泄漏。例如:
```cpp
std::shared_ptr<int> p = std::make_shared<int>(10);
std::weak_ptr<int> q = p;
std::shared_ptr<int> r = q.lock();
```
这些智能指针都定义在`<memory>`头文件中,并且都是模板类,可以用于管理各种类型的动态分配内存。在实际开发中,应尽量使用智能指针来管理内存,避免手动管理内存所带来的麻烦和风险。
阅读全文