{ return std::get<1>(_M_t); } // 默认构造 __uniq_ptr_impl() = default; __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; } // 删除了拷贝构造和拷贝赋值,实现了移动构造(略),确保 unique_ptr 的语意实现 private: std::tuple<pointer, _Dp> _M_t; // 用一个...
和std::auto_ptr一样,std::unique_ptr也是一种智能指针,它也是通过指针的方式来管理对象资源,并且在 unique_ptr 的生命期结束后释放该资源。 unique_ptr 持有对对象的独有权 —— 两个 unique_ptr 不能指向一个对象,...
unique_ptr的核心是__uniq_ptr_impl类,它实现了raw pointer的所有操作,包括获取raw pointer、接受用户自定义deleter。std::make_unique的源码直观展示了如何通过new操作内存分配,然后将新分配的内存传递给unique_ptr的构造函数,整个过程简洁明了。通过实例,我们可以看到unique_ptr在内存分配和释放上的优...
{std::unique_ptr<Foo>up5a(new Foo);std::unique_ptr<Foo>up5b(std::move(up5a));// ownership transfer}std::cout<<"\nExample constructor(6)...\n"; {std::unique_ptr<Foo, D>up6a(new Foo, d);// D is copiedstd::unique_ptr<Foo, D>up6b(std::move(up6a));// D is movedstd...