std::shared_ptr 是 C++11 中引入的智能指针,它会自动管理动态分配的内存,避免了内存泄漏的问题。尽管它是一个智能指针,但有时你可能需要从 std::shared_ptr 获取原始指针(即裸指针)以进行某些底层操作。
你可以使用 std::shared_ptr 的 get() 方法来获取原始指针。get() 返回的是一个裸指针,它指向智能指针管理的对象。
示例代码:
#include <iostream>
#include <memory> // 引入 shared_ptr
int main() {
// 创建一个 shared_ptr
std::shared_ptr<int> sp = std::make_shared<int>(10);
// 使用 get() 获取原始指针
int* rawPtr = sp.get();
// 使用原始指针
std::cout << "Value pointed to by rawPtr: " << *rawPtr << std::endl;
std::cout << "Value stored in shared_ptr: " << *sp << std::endl;
return 0;
}
解释:
- std::make_shared<int>(10) 创建了一个 shared_ptr<int>,它管理一个 int 类型的对象并初始化为 10。
- sp.get() 返回一个原始指针 rawPtr,指向智能指针 sp 管理的对象。
- 通过 rawPtr 和 sp 都可以访问到相同的对象。
注意:
使用场景:
- 底层操作:有时候你可能需要将原始指针传递给某些旧版的接口,这些接口可能不支持智能指针。在这种情况下,可以使用 get() 提取裸指针。
- 与 C 语言库交互:如果你需要与一些只接受裸指针的 C 风格函数库交互,使用 shared_ptr::get() 获取原始指针是一个合适的选择。
结论:
std::shared_ptr 提供了内存管理功能,通过 get() 方法可以轻松地获取原始指针。这对于某些特殊的底层操作或与 C 库的交互非常有用。然而,应该谨慎使用原始指针,确保不会在 shared_ptr 被销毁后使用它。





