1.reset 方法: reset方法用于将unique_ptr设置为未初始化状态(即释放其当前指向的对象并设置内部的指针为 nullptr)。这个方法有两个版本: cpp复制代码 voidreset( pointer ptr = pointer() )noexcept; ptr参数是可选的,用于显式地指定要删除的对象。如果提供了ptr,则unique_ptr将删除该对象。如果未提供ptr,则uni...
这个方法可以用于获取底层指针,但需要小心使用,因为在unique_ptr生命周期结束后,返回的指针将变成悬空指针。 2. release()方法,释放unique_ptr对所管理对象的所有权,并返回指向该对象的指针。调用release()后,unique_ptr不再拥有该对象,可以用于将unique_ptr交给其他智能指针管理或手动管理内存。 3. reset()方法,...
使用reset把unique_ptr拥有的存储指针更改为ptr,然后删除原始存储的指针。 如果unique_ptr不为空,reset将调用原始存储指针上的get_deleter返回的删除器函数。 因为reset首先将存储新指针 ptr,然后删除原始存储的指针,如果与原始存储指针相同,则reset可以立即删除ptr。
使用reset 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针。 int main() { unique_ptr<int> ptr1(new int(10)); unique_ptr<int> ptr2 = move(ptr1); ptr1.reset(); ptr2.reset(new int(250)); return 0; } ptr1.reset(); 解除对原始内存的管理 ptr...
alpha.get_deleter()= state_deleter();//a brand new deleter for alpha//additional deletions when unique_ptr objects reach out of scope//(in inverse order of declaration)return0; } 输出: 6、reset方法 //unique_ptr::reset example#include <iostream>#include<memory>intmain () { ...
std::unique_ptr<int>p6; //p6 获取 p 的所有权 p6.reset(p); cout<<*p6<< endl;; return0; } 程序执行结果为: 10 p5 is nullptr 10 --- 上面有误--- std::unique_ptr::release pointer release() noexcept; Release pointer Releases ownership...
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 方法可以让 unique_ptr 解除对原始内存的管理,也可以用来初始化一个独占的智能指针 intmain() ...
可以使用release方法释放std::unique_ptr的所有权,并返回原始指针: std::unique_ptr<int>ptr(newint(10));int*raw_ptr=ptr.release();// 释放所有权,返回原始指针deleteraw_ptr;// 手动删除对象以避免内存泄漏 重置和重新分配 可以使用reset方法重置std::unique_ptr,释放当前对象并管理新的对象: ...
std::unique_ptr 是 C++11 引入的智能指针,用于自动管理动态分配的对象,确保在智能指针超出作用域时自动释放资源。release、reset 和 move ...
std::unique_ptr<int> p2 = std::move(p1); //这是合法的 p2.reset(new int(2));//使用reset重新设置一个,原本旧的指针对象会被delete掉 如果想临时获取unique_ptr指向的对象,则可以调用get()方法。只是要注意,不要尝试去释放它或超过unique_ptr的生存周期范围来访问它,毕竟对象的生存周期还是由unique_...