使用普通指针初始化shared_ptr
时间: 2023-08-14 16:05:34 浏览: 77
要使用普通指针初始化 `std::shared_ptr`,可以使用其构造函数。下面是一个示例:
```cpp
int* rawPtr = new int(10);
std::shared_ptr<int> sharedPtr(rawPtr);
```
在这个示例中,我们首先创建一个 `int` 类型的普通指针 `rawPtr`,并将其初始化为一个新分配的 `int` 对象的地址。然后,我们使用 `std::shared_ptr` 的构造函数将普通指针 `rawPtr` 初始化为一个共享指针 `sharedPtr`。
需要注意的是,使用普通指针初始化 `std::shared_ptr` 后,`std::shared_ptr` 会接管普通指针所管理的资源的所有权。因此,在不再需要该资源时,应该避免直接使用普通指针来释放资源,而是让 `std::shared_ptr` 自动管理资源的释放。
相关问题
普通指针赋给shared_ptr
将普通指针赋给 shared_ptr 可以通过 shared_ptr 的构造函数或者 reset() 函数来实现。下面是两个示例:
1. 使用构造函数:
```cpp
int* ptr = new int(5);
std::shared_ptr<int> sharedPtr(ptr);
```
2. 使用 reset() 函数:
```cpp
int* ptr = new int(5);
std::shared_ptr<int> sharedPtr;
sharedPtr.reset(ptr);
```
无论是使用构造函数还是 reset() 函数,都会将普通指针的所有权转移到 shared_ptr,这样 shared_ptr 就可以管理指针的生命周期,并确保在不再需要时正确释放内存。请注意,当最后一个 shared_ptr 离开作用域或被显式释放时,指向的内存会被自动释放。
普通指针转std::shared_ptr
普通指针可以通过将其传递给 `std::shared_ptr` 的构造函数来转换为 `std::shared_ptr`。下面是一个示例:
```cpp
int* ptr = new int(42); // 创建一个普通指针
std::shared_ptr<int> sharedPtr(ptr); // 使用普通指针初始化 std::shared_ptr
// 确保不再使用普通指针后,释放内存
// delete ptr;
```
在上面的示例中,我们创建了一个 `int` 类型的普通指针 `ptr`,然后将其传递给 `std::shared_ptr` 的构造函数来创建一个共享所有权的智能指针 `sharedPtr`。
当我们不再使用普通指针时,我们可以选择是否手动释放内存。如果要手动释放内存,只需取消注释 `// delete ptr;` 这一行即可。否则,当 `sharedPtr` 超出范围时,它将自动释放内存。