unique_ptr:unique_ptr是一个独占所有权的指针,这意味着一次只能有一个unique_ptr指向一个对象。unique_ptr控制一个对象的生命周期,当unique_ptr被销毁(例如超出其作用域)时,它所指向的对象也会被自动删除。不能复制unique_ptr到另一个unique_ptr,但是可以移动它。通常用于资源的唯一管理,例如一个文件、
#include<memory>intmain(){// 创建一个unique_ptr,指向一个动态分配的int对象std::unique_ptr<int>ptr(newint(42));// 使用指针操作符和解引用操作符访问所指向对象的值std::cout<<*ptr<<std::endl;// 输出: 42// 通过移动构造函数将所有权转移给另一个unique_ptrstd::unique_ptr<int>ptr2=std::m...
unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权。它取代了C++98中的auto_ptr。 unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。 unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。 #include <iostream> #include...
1.shared_ptr 1.1 shared_ptr介绍 shared_ptr主要用于托管动态分配的内存。 在程序中动态分配了一块内存,这块内存可以是变量可以是对象,为了避免内存泄露,我们必须在整个程序的所有可能跑到的分支,保证这块内存不用了之后可以得到正确的释放。 普通指针使用起来麻烦,而
std::shared_ptrmay be used with an incomplete typeT. However, the constructor from a raw pointer (template shared_ptr(Y)) and the templatevoid reset(Y) member function may only be called with a pointer to a complete type (note that std::unique_ptr may be constructed from a raw pointer...
shared_ptr允许多个指针指向同一个对象; unique_ptr则“独占”所指向的对象。 标准库还定义了一种名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象,这三种智能指针都定义在memory头文件中。 如果使用智能指针,即使程序块过早结束,智能指针也能确保在内存不再需要时将其释放。如果使用内置指针管理...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
创建一个空的unique_ptr对象,因为没有与之关联的原始指针,所以它是空的。 std::unique_ptr<int> ptr1; 1. 检查unique_ptr 对象是否为空 有两种方法可以检查 unique_ptr 对象是否为空或者是否有与之关联的原始指针。 // 方法1 if(!ptr1) std::cout<<"ptr1 is empty"<<std::endl; ...
unique_ptr 头文件 代码语言:javascript 代码运行次数:0 运行 AI代码解释 template <typename T, typename D = std::function<void(T*)>> class UniquePointer { public: UniquePointer(const UniquePointer&) = delete; UniquePointer& operator=(const UniquePointer&) = delete; UniquePointer(T *raw_p = ...
通过这种方式,您可以将其unique_ptr视为更安全,更好的替代品auto_ptr。shared_ptr另一方面,允许多个指针指向给定资源。当shared_ptr资源的最后一个被销毁时,资源将被释放。例如,此代码完全合法:shared_ptr<T> myPtr(new T); // Okayshared_ptr<T> myOtherPtr = myPtr; // ...