請使用 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...
reset是std::unique_ptr的一个成员函数,用于将std::unique_ptr重新设置为一个新的指针(可以是空指针)。调用reset后,std::unique_ptr会释放之前管理的对象(如果有),并开始管理新的对象。 std::unique_ptr<int>ptr1(newint(10));ptr1.reset(newint(20));// ptr1 现在管理新的对象,之前的对象被释放ptr1....
#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...
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); ...
这个方法可以用于获取底层指针,但需要小心使用,因为在unique_ptr生命周期结束后,返回的指针将变成悬空指针。 2. release()方法,释放unique_ptr对所管理对象的所有权,并返回指向该对象的指针。调用release()后,unique_ptr不再拥有该对象,可以用于将unique_ptr交给其他智能指针管理或手动管理内存。 3. reset()方法,...
unique_ptr的产生,就是为了解决,raw pointer 的new和delete配对使用问题。对于raw pointer来说,在new...
reset()不带参数情况:释放智能指针所指向的对象(释放因为它是独占,而不像shared_ptr还需要考虑引用计数),并将智能指针置空。 reset()带参数时:释放智能指针所指向的对象,并将该智能指针指向新对象。 4. swap(); // 交换智能指针 例如: unique_ptr<string> pointer(new string("123456")); ...
unique_ptr p2(newint(10)); p1.reset();//释放智能指针所指的对象,并将智能指针置空p1.reset(p2);//释放智能指针所指的对象,并将智能指针指向p2(新对象) 4、指向一个数组 unique_ptr<int[]> parray(newint[10]);//注意要有[]parray[0] =0; ...