reset是std::unique_ptr的一个成员函数,用于将std::unique_ptr重新设置为一个新的指针(可以是空指针)。调用reset后,std::unique_ptr会释放之前管理的对象(如果有),并开始管理新的对象。 std::unique_ptr<int>ptr1(newint(10));ptr1.reset(newint(20));// ptr1 现在管理新的对象,之前的对象被释放ptr1....
如果unique_ptr不为空,reset将调用原始存储指针上的get_deleter返回的删除器函数。 因为reset首先将存储新指针 ptr,然后删除原始存储的指针,如果与原始存储指针相同,则reset可以立即删除ptr。 要求 标头:<memory> 命名空间:std 请参见 参考 unique_ptr 类 <memory> 其他资源 unique_ptr 成员 memory 成员...
std::weak_ptr<int> gw = sp; //sp的control块中弱引用计数会加1 sp.reset(nullptr); //删除管理的指针对像,即new int[42]被delete掉 if (std::shared_ptr<int> spt = gw.lock())//调用lock,判断sp的管理对象是否已经被释放了 std::cout << "*spt == " << *spt << '\n'; else std::...
{//通过构造函数初始化unique_ptr<int> ptr1(newint(10));//通过转移所有权的方式初始化unique_ptr<int> ptr2 =move(ptr1); unique_ptr<int> ptr3 =func();return0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. (3)使用 reset 方法可以让 uniqu...
虽然unique_ptr之间不能拷贝与赋值。但是可以使用release和reset函数来将指针的所有权从一个(非const)unique_ptr转移给另一个unique release函数 将当前的unique_ptr指针所指的内存置为空,并且对这块内存的所有权消失 返回值:返回当前unique_ptr所指的内存
4.通过reset重置:如std::unique_ptr up; up.reset(new T()); (二)指定删除器 1. unique_ptr<T,D> u1(p,d);删除器是unique_ptr类型的组成部分,可是普通函数指针或lambda表达式。注意,当指定删除器时需要同时指定其类型,即D不可省略。 2.使用默认的deleter时,unique_ptr对象和原始指针的大小是一样的。
reset 函数用于重置 UniquePtr 所指向的对象。如果当前已经持有一个对象,则先删除它,然后接管新传入的对象。template<typename T>void UniquePtr<T>::reset(T* ptr) { delete ptr_; // 删除当前对象所指向的资源 ptr_ = ptr; // 接管新资源} 3. release函数 release 函数用于释放 UniquePtr 对资源...
unique_ptr的产生,就是为了解决,raw pointer 的new和delete配对使用问题。对于raw pointer来说,在new...
void UniquePtr<T>::reset(T* ptr) { delete ptr_; // 删除当前对象所指向的资源 ptr_ = ptr; // 接管新资源 } 3. release函数 release函数用于释放UniquePtr对资源的所有权,返回原始指针,并将内部指针设为nullptr。这样做可以手动管理资源,但通常不推荐这样做,因为它破坏了UniquePtr的自动管理特性。
常见成员函数 operator*:解引用操作符,用于获取 unique_ptr 所指向对象的引用。 operator->:箭头操作符,用于通过 unique_ptr 访问对象的成员函数或成员变量。 get:返回指向所管理对象的裸指针。 reset:重置 unique_ptr,释放当前所管理的对象并接管新的对象。