std::shared_ptr<int>sp=std::make_shared<int>(10)int*pRaw=sp.get(); 但取出的原始指针,可能被释放,因此使用这个指针是不安全的,如在不同线程中,应该对该指针做加锁保护,或者以weak_ptr取代原始指针,例:https://www.jianshu.com/p/661b79cde7c7...
从shared_ptr获得正常的ptr的方法是使用get()成员函数。这个函数返回一个指向共享对象的原始指针,即ptr。 示例代码: 代码语言:c++ 复制 #include<iostream> #include<memory> int main() { std::shared_ptr<int> shared_ptr = std::make_shared<int>(42); int* ptr = shared_ptr.get(); std::cout <...
#include <memory> int main() { // 创建一个包含5个int的数组 std::unique_ptr<int[]> arr(new int[5]); // 获取原始指针数组 int* rawPtr = arr.get(); // 使用原始指针数组进行操作 for (int i = 0; i < 5; ++i) { rawPtr[i] = i; } // 打印数组元素 for (int i =...
此时可以利用ResourceManager提供的*** 以及->操作符直接操作原始Fruit* 指针,使得ResourceManager对象就像一个真实的指向Fruit对象的Fruit* 指针。 2 unique_ptr 思想 unique_ptr作为最常用的智能指针,它提供了对资源的独占式管理,即对资源的唯一所有权(sole ownership), 这就要求unique_ptr是一个不可复制的对象。
在接下来的章节中,我们会深入解析 C++ 的智能指针类型,包括std::unique_ptr、std::shared_ptr和std::weak_ptr,并介绍它们在不同场景中的应用,以及如何使用它们进行更高效的内存管理。 1.2 智能指针的类型 在C++中,有几种类型的智能指针,包括std::unique_ptr、std::shared_ptr和std::weak_ptr。以下是这三种智...
(2)原始指针转 std::shared_ptr(不推荐)如果已经有了一个原始指针,并且想要将其转换为std::...
reset():释放当前所拥有的对象(如果存在),可选地接受一个新的裸指针来接管。 get():返回指向对象的原始指针,但不改变所有权。 operator->() 和 operator*():提供对托管对象的直接访问。 swap():交换两个shared_ptr的内容。 与std::make_shared一起使用可以提高效率和减少内存碎片。
get函数获取原始指针 注意不要用一个原始指针初始化多个shared_ptr,否则会造成二次释放同一内存 注意避免循环引用,shared_ptr的一个最大的陷阱是循环引用,循环,循环引用会导致堆内存无法正确释放,导致内存泄漏。循环引用在weak_ptr中介绍。 #include<iostream>#include<memory>intmain{{inta =10;std::shared_ptr<int...
std::unique_ptr是独有所有权的智能指针,std::shared_ptr实现了共享所有权的概念,而std::weak_ptr是一种非拥有的弱引用智能指针。 关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/625744 问题三:如何使用std::unique_ptr和std::shared_ptr? 如何使用std::unique_ptr和std::shared_ptr...