普通指针赋给shared_ptr
时间: 2023-07-28 14:11:30 浏览: 83
将普通指针赋给 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 离开作用域或被显式释放时,指向的内存会被自动释放。
相关问题
shared_ptr赋给普通指针
shared_ptr是C++中的智能指针,用于管理动态分配的对象。普通指针是一种简单的指针类型,没有自动内存管理功能。
如果要将一个shared_ptr赋给普通指针,可以通过使用shared_ptr的get()函数获取其指向的原始指针,并将其赋给普通指针。示例如下:
```cpp
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);
int* rawPtr = sharedPtr.get();
std::cout << *rawPtr << std::endl;
return 0;
}
```
在上述示例中,我们创建了一个shared_ptr<int>对象sharedPtr,并使用make_shared函数来分配一个int类型的对象,并赋予其值为42。然后,我们使用sharedPtr.get()获取其指向的原始指针,并将其赋给int类型的普通指针rawPtr。最后,我们通过解引用rawPtr来访问对象的值。
需要注意的是,当原始指针rawPtr超出其作用域时,不会自动释放内存。因此,在使用普通指针时,需要手动管理内存的释放,以避免内存泄漏问题。
阅读全文