怎么获取shared_ptr的指针
时间: 2024-12-23 12:15:17 浏览: 4
`std::shared_ptr` 是 C++11 引入的一种智能指针,它自动管理动态分配的对象内存,并支持共享所有权。获取 `shared_ptr` 的指针通常有两种情况:
1. **创建新 shared_ptr**:
当你需要一个新的对象并且希望它被 `shared_ptr` 管理时,你可以这样做:
```cpp
std::shared_ptr<int> ptr = std::make_shared<int>(42); // 创建了一个共享指向整数的新对象,值为42
```
这里,`ptr.get()` 或者直接 `*ptr` 就可以得到指向原始数据的指针。
2. **从已有的指针复制**:
如果你有一个普通的指针(比如 `int* rawPtr`),可以将其转换为 `shared_ptr`:
```cpp
int* rawPtr = new int(100);
std::shared_ptr<int> sharedPtr(rawPtr, /* deleter */); // 使用默认 deleter (delete)
// 或者
sharedPtr = std::shared_ptr<int>(rawPtr, /* custom deleter */);
*sharedPtr.get(); // 获取原始指针
```
3. **从其他 smart pointer 类型转换**:
如果你想从其他类型的 smart pointer(如 `unique_ptr`)转换为 `shared_ptr`,可以这样做:
```cpp
std::unique_ptr<int> uniquePtr(new int(50));
std::shared_ptr<int> sharedPtr(uniquePtr.release()); // 释放 unique_ptr 的所有权并转移给 shared_ptr
```
记住,在使用 `shared_ptr` 的时候,要确保它的生命周期比依赖于它的对象长,否则可能会造成悬挂指针(悬空引用)的问题。
阅读全文