3,reset:原来unique_ptr或auto_ptr指向的对象将会析构,智能指针指向新对象。 参数一般是p.release()这种形式。unique_ptr执行reset(nullptr)后,其本来指向的对象或者对象数组都会进行析构。 unique_ptr增加了move,可以一目了然从一个unique_ptr将所有权转移到另一个,相当于之前的reset(pold.release()),但更易于...
void reset( pointer ptr = pointer() ) noexcept; (1)(constexpr since C++23) members of the specialization unique_ptr<T[]> template< class U > void reset( U ptr ) noexcept; (2)(constexpr since C++23) void reset( std::nullptr_t = nullptr ) noexcept; ...
\n"; std::unique_ptr<Foo, D> up(new Foo(), D()); // up 占有 Foo 指针(删除器 D) std::cout << "以新的 Foo 替换所拥有的 Foo...\n"; up.reset(new Foo()); // 调用旧者的删除器 std::cout << "释放并删除所拥有的 Foo...\n"; up.reset(nullptr); } 输出: 创建新的 ...
constexpr unique_ptr(nullptr_t) noexcept : unique_ptr() {} // 但其实直接用 ptr = nullpt...
(1) 构造一个没有管理任何资源的 std::unique_ptr 对象。 这里的 nullptr_t 是从 C++11 开始新增的类型, 表示空指针(nullptr)的类型。 (2) 构造一个管理 p 指向资源的 std::unique_ptr...
std::unique_ptr 1.特性 1) 任意时刻unique_ptr只能指向某一个对象,指针销毁时,指向的对象也会被删除(通过内置删除器,通过调用析构函数实现删除对象) 2)禁止拷贝和赋值(底层实现拷贝构造函数和复制构造函数 = delete),可以使用std::move()、unique_ptr.reset(...) 转移对象指针控制权。 (由1决定,指针发生了...
#include <iostream> #include <memory> int main() { std::unique_ptr<int> ptr(new int(42)); if (ptr) std::cout << "重置前,ptr 为: " << *ptr << '\n'; ptr.reset(); (ptr ? (std::cout << "重置后,ptr 为: " << *ptr) : (std::cout << "重置后 ptr 为空")) << ...
unique_ptr有一个成员类型pointer,如果该类型存在,则等于std::remove_reference<Deleter>::type::...
(1) 管理单个对象泛化的unique_ptr模板的声明。 (2) 对 (1) 版本, 针对对象数组进行特化后的版本的声明。 2.unique_ptr 的构造函数 unique_ptr<T>的构造函数。 constexprunique_ptr(); (1) constexprunique_ptr(nullptr_t); explicitunique_ptr(pointer p); (2)unique_ptr(pointer p, (3) ...
而unique_ptr的最大不同在于它没有control block,它只是简单的封装了下raw ptr,提供了控制构造函数...