在对象的生命周期结束时,析构函数会自动释放该指针所指向的内存。 在使用unique_ptr时,需要注意以下几点: - 只能通过构造函数来创建对象,不能使用new操作符。 - 可以通过成员函数`reset()`来释放关联的指针,使指针为空。 - 可以通过成员函数`release()`来释放关联的指针,并返回指针的所有权。 总之,unique_ptr...
6. 其他成员函数(unique_ptr::release, unique_ptr::reset, unique_ptr::swap, unique_ptr::get, unique_ptr::get_deleter, unique_ptr::operator bool, unique_ptr::operator*、un...
= &other) { // 防止自赋值 delete ptr_; // 删除当前对象所指向的资源 ptr_ = other.ptr_; // 接管源对象的资源 other.ptr_ = nullptr; // 将源对象的指针设为nullptr } return *this;} 2. reset函数 reset 函数用于重置 UniquePtr 所指向的对象。如果当前已经持有一个对象,则先删...
按理说reset的时候需要delete ptr就需要ptr的类型(错了请指正),而shared_ptr的template type可以是inc...
sp3.reset();// 通过reset重置内部数据指针为空 1. 2. 3. 4. 5. 6. 注意,不能构造两个独立的智能指针,且指向同一个内部数据指针 int *p = new int(1); shared_ptr<int> sp1(p); shared_ptr<int> sp2(p); 1. 2. 3. 上述代码中,p最终会被释放两次,从而造成错误!当需要sp2也包装p时,请使用...
()释放并返回源unique_ptr对象管理的资源// reset是将__u.release()返回的资源赋给目标(当前)unique_ptr对象reset(__u.release());get_deleter()=std::forward<deleter_type>(__u.get_deleter());return*this;}// 析构函数,调用析构器析构掉管理的资源,并将__ptr指向nullptr~unique_ptr(){auto&__...
void UniquePtr<T>::reset(T* ptr) { delete ptr_; // 删除当前对象所指向的资源 ptr_ = ptr; // 接管新资源 } 3. release函数 release函数用于释放UniquePtr对资源的所有权,返回原始指针,并将内部指针设为nullptr。这样做可以手动管理资源,但通常不推荐这样做,因为它破坏了UniquePtr的自动管理特性。
reset的时候需要类型完整。默认构造的时候允许是不完整类型。为什么会这样呢?shared_ptr怎么处理Deleter呢?(还记得吧, Deleter 就是智能指针析构时候的删除操作) 在常见编译器的实现里,shared_ptr把Deleter(包括默认情况下的 operator delete)放进一个叫做control block的结构里,相当于做了一次 type erasure,把Deleter...
在析构时,释放持有的指针。 3. 符号重载 = 重载 unique_ptr&operator=(unique_ptr&&__u)noexcept{reset(__u.release());get_deleter()=std::forward<deleter_type>(__u.get_deleter());return*this;} 调用reset,将__u内部的指针传递给,然后释放内部的。
因为reset首先将存储新指针ptr,然后删除原始存储的指针,如果与原始存储的指针相同,则reset可以立即删除ptr。 swap 交换两个unique_ptr对象之间的指针。 C++ voidswap(unique_ptr& right); 参数 right 用于交换指针的unique_ptr。 备注 成员函数将stored_ptr与right.stored_ptr、stored_deleter与right.stored_deleter进行...