unique_ptr::reset函数用于释放当前unique_ptr所管理的对象,并可选地接管另一个对象的所有权。如果调用reset时不提供参数,它会释放当前管理的对象并将unique_ptr置为空;如果提供参数,它会释放当前管理的对象并接管新参数所指向对象的所有权。 2. 描述unique_ptr::reset函数的参数及其意义 unique_ptr::reset函数可以...
reset方法用于将unique_ptr设置为未初始化状态(即释放其当前指向的对象并设置内部的指针为 nullptr)。这个方法有两个版本: cpp复制代码 voidreset( pointer ptr = pointer() )noexcept; ptr参数是可选的,用于显式地指定要删除的对象。如果提供了ptr,则unique_ptr将删除该对象。如果未提供ptr,则unique_ptr将删除其...
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.get():返回unique_ptr中保存的裸指针 2.reset():重置unique_ptr。 3.release():放弃对指针的控制权,返回裸指针,并将unique_ptr自身置空。通常用来初始化另一个智能指针。 4.swap(q):交换两个智能指针所指向的对象。 【编程实验】std::unique_ptr的基本用法 ...
a.reset(); std::cout<<a<<std::endl; 1. 2. 3. 4. get获取原始指针 std::unique_ptr<int>a=std::make_unique<int>(666); int*b=a.get(); std::cout<<b<<std::endl; 1. 2. 3. release将指针置0 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 指针指向的堆内存⽆法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独⾃拥有对其所指堆内存空间的所有权。这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引⽤计数,都只能为 1,⼀旦该 unique_ptr 指针放弃对所指堆内存空间的所有权,则该空间会被⽴即释放回收。
int main() { { unique_ptr<Widget> w1(new Widget(1, 2, 3)); w1->print(); auto w2 = unique_ptr<Widget>(new Widget(10, 20, 30)); w1.swap(w2); w1->print(); w2->print(); w2.reset(); //w2=nullptr; //等价于w2.reset() w2.reset(new Widget(11, 22, 33)); if (w2 !
operator*:解引用操作符,用于获取 unique_ptr 所指向对象的引用。 operator->:箭头操作符,用于通过 unique_ptr 访问对象的成员函数或成员变量。 get:返回指向所管理对象的裸指针。 reset:重置 unique_ptr,释放当前所管理的对象并接管新的对象。 release:释放对所管理对象的控制权,并返回该指针的裸指针。