共享指针怎么变成普通指针
时间: 2024-09-12 20:01:09 浏览: 98
在C++中,共享指针(也称为智能指针)通常指的是std::shared_ptr,这是一种管理动态分配内存的智能指针。std::shared_ptr通过引用计数机制共享资源的所有权,当没有任何std::shared_ptr指向资源时,资源会被自动释放。如果你想要将std::shared_ptr转换为普通指针(裸指针),可以使用其提供的成员函数get()来实现。
下面是一个简单的例子,展示如何将std::shared_ptr转换为普通指针:
```cpp
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> sp = std::make_shared<int>(10); // 创建一个共享指针
int* raw_ptr = sp.get(); // 通过get()函数获取普通指针
// 输出普通指针所指的值,用于验证转换是否成功
std::cout << *raw_ptr << std::endl;
return 0;
}
```
在上面的代码中,我们首先创建了一个std::shared_ptr<int>类型的智能指针sp,并通过make_shared函数初始化它。然后,我们使用get()函数获取了sp所管理的资源的裸指针,存储在raw_ptr变量中。
需要注意的是,当使用get()函数时,返回的是一个临时的裸指针,这个指针指向共享指针管理的资源,但它不拥有资源。因此,使用这个裸指针时要小心,不要进行delete操作,因为这会导致与std::shared_ptr管理的资源释放机制冲突。另外,当最后一个std::shared_ptr被销毁时,它所管理的资源会被释放,这时通过get()获取的裸指针指向的资源可能已经不再有效。
阅读全文