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....
使用reset把unique_ptr拥有的存储指针更改为ptr,然后删除原始存储的指针。 如果unique_ptr不为空,reset将调用原始存储指针上的get_deleter返回的删除器函数。 因为reset首先将存储新指针 ptr,然后删除原始存储的指针,如果与原始存储指针相同,则reset可以立即删除ptr。
template<typename T>void UniquePtr<T>::reset(T* ptr) { delete ptr_; // 删除当前对象所指向的资源 ptr_ = ptr; // 接管新资源} 3. release函数 release 函数用于释放 UniquePtr 对资源的所有权,返回原始指针,并将内部指针设为 nullptr。这样做可以手动管理资源,但通常不推荐这样做,因为它破坏...
std::unique_ptr 是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针 一、初始化 (1)构造函数初始化:可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个 unique_ptr 赋值给另一个 unique_ptr。 //通过构造函数初始化对象unique_ptr<int> ptr1(newint(10));//error, 不...
UniquePtr<T>& UniquePtr<T>::operator=(UniquePtr&& other) noexcept { if (this != &other) { // 防止自赋值 delete ptr_; // 删除当前对象所指向的资源 ptr_ = other.ptr_; // 接管源对象的资源 other.ptr_ = nullptr; // 将源对象的指针设为nullptr } return *this; } 2. reset函数 reset...
1.shared_ptr 的初始化 我们知道共享指针shared_ptr是一个模板类,可以使用多个智能指针同时去管理一块有效的内存,进行初始化常用的三种方式:通过构造函数、std::make_shared 辅助函数以及 reset 方法。共享智能指针对象初始化完毕之后就指向了要管理的那块堆内存,如果想要查看当前有多少个智能指针同时管理着这块内存可以...
unique_ptr<int>p=clone(10); cout<<*p<<endl;//打印10 return0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 四、release、reset函数的使用 虽然unique_ptr之间不能拷贝与赋值。但是可以使用release和reset函数来将指针的所有权从一个(非const)unique_ptr转移给另...
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<T> 模板类提供了多个实用的构造函数,这里给读者列举了几种常用的构造 unique_ptr 智能指针的方式。 1) 通过以下 2 种方式,可以创建出空的 unique_ptr 指针: std::unique_ptr<int>p1(); ...