reset是std::unique_ptr的一个成员函数,用于将std::unique_ptr重新设置为一个新的指针(可以是空指针)。调用reset后,std::unique_ptr会释放之前管理的对象(如果有),并开始管理新的对象。 std::unique_ptr<int>ptr1(newint(10));ptr1.reset(newint(20));// ptr1 现在管理新的对象,之前的对象被释放ptr1....
使用reset把unique_ptr拥有的存储指针更改为ptr,然后删除原始存储的指针。 如果unique_ptr不为空,reset将调用原始存储指针上的get_deleter返回的删除器函数。 因为reset首先将存储新指针 ptr,然后删除原始存储的指针,如果与原始存储指针相同,则reset可以立即删除ptr。
1.reset 方法: reset方法用于将unique_ptr设置为未初始化状态(即释放其当前指向的对象并设置内部的指针为 nullptr)。这个方法有两个版本: cpp复制代码 voidreset( pointer ptr = pointer() )noexcept; ptr参数是可选的,用于显式地指定要删除的对象。如果提供了ptr,则unique_ptr将删除该对象。如果未提供ptr,则uni...
釋放目前擁有的資源並接受所提供的新資源的擁有權。呼叫deleter function針對先前儲存的地址,並將存放所提供的地址,取代舊的資源。使用reset不做任何事,如果新的地址等同於目前儲存的地址。複製 void reset(pointer _Ptr = pointer()); void reset(nullptr_t _Ptr); ...
void reset( pointer ptr = pointer() ) noexcept; 1. 使用reset 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针。 eg: int main() { unique_ptr<int> ptr1(new int(10)); unique_ptr<int> ptr2 = move(ptr1); ...
voidreset(std::nullptr_t=nullptr)noexcept; (3)(constexpr since C++23) Replaces the managed object. 1)Givencurrent_ptr, the pointer that was managed by*this, performs the following actions, in this order: Saves a copy of the current pointerold_ptr = current_ptr. ...
reset释放智能指针 std::unique_ptr<int>a=std::make_unique<int>(666); //释放内存,同时将a置0,所以不会出现悬挂指针的问题 a.reset(); std::cout<<a<<std::endl; 1. 2. 3. 4. get获取原始指针 std::unique_ptr<int>a=std::make_unique<int>(666); ...
void reset( std::nullptr_t = nullptr ) noexcept; (3) (C++23 起为 constexpr) 替换被管理对象。 1,2) 等价于 auto old_ptr = get();/* 将“ptr” 赋给存储的指针 */if (old_ptr) get_deleter()(old_ptr);。如果get_deleter()(old_ptr) 抛出异常,那么行为未定义。2...
unique_ptr有一个成员类型pointer,如果该类型存在,则等于std::remove_reference<Deleter>::type::...