当然,作为Comate,我很乐意帮助你理解std::unique_ptr及其成员函数release和reset。 1. std::unique_ptr是什么? std::unique_ptr是C++11标准库中引入的一种智能指针,用于管理动态分配的内存。它确保了在不再需要对象时自动释放内存,从而避免了内存泄漏。与std::shared_ptr不同,std::unique_ptr具有独占所有权,即同...
成员函数: release():释放所有权,返回指向对象的原始指针,之后unique_ptr变为空。 reset():释放当前所拥有的对象(如果存在),可选地接受一个新的裸指针来接管。 get():返回指向对象的原始指针,但不改变所有权。 operator->() 和 operator*():提供对托管对象的直接访问。 案例 #include <memory> // 1.创建...
U>&& u) noexcept { reset(u.release()); return *this; } CO...
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...
6. 其他成员函数(unique_ptr::release,unique_ptr::reset,unique_ptr::swap,unique_ptr::get,unique_ptr::get_deleter,unique_ptr::operator bool,unique_ptr::operator*、unique_ptr::operator->, ) 主要针对unique_ptr<T>, 特化版本unique_ptr<T>与之类似。
std::unique_ptr<int>ptr(newint(10));int*raw_ptr=ptr.release();// 释放所有权,返回原始指针deleteraw_ptr;// 手动删除对象以避免内存泄漏 重置和重新分配 可以使用reset方法重置std::unique_ptr,释放当前对象并管理新的对象: std::unique_ptr<int>ptr(newint(10));ptr.reset(newint(20));// 重置并...
类似shared_ptr,初始化unique_ptr必须采用直接初始化形式。由于一个unique_ptr拥有它指向的对象,因此unique_ptr不支持普通的拷贝或赋值操作。虽然不能拷贝或赋值unique_ptr,但可以通过调用release或reset将指针的所有权从一个(非const)unique_ptr转移给另一个unique。
注意如 p.reset(p.release()) 的代码不涉及自重置,只有类似 p.reset(p.get()) 的代码才是。 示例运行此代码 #include <iostream> #include <memory> struct Foo // 要管理的对象 { Foo() { std::cout << "Foo...\n"; } ~Foo() { std::cout << "~Foo...\n"; } }; struct D // ...
{// 自动释放资源std::unique_ptr<Test>u_p1=std::make_unique<Test>();}// 通过 reset 释放资源std::unique_ptr<Test>u_p2=std::make_unique<Test>();u_p2.reset();// release 释放了所有权, 但没有删除资源, 需要手动删除,std::unique_ptr<Test>u_p3=std::make_unique<Test>();Test*p3=...
();//p - 100 smart pointer.get()返回一个指向该对象的内置指针14foo.reset(bar.release());//bar 放弃指针控制权,返回指针给foo foo - 100, bar已经不存在1516cout <<"foo :"<< *foo <<endl;17cout <<"p :"<< *p <<endl;18deletep; //记得删除,这也是使用智能指针的初衷之一---防止内存...