智能指针原理及实现(2)unique_ptr

只容许基础指针的一个全部者。 能够移到新全部者(具备移动语义),但不会复制或共享(即咱们没法获得指向同一个对象的两个unique_ptr)。 替换已弃用的 auto_ptr。 相较于 boost::scoped_ptr。 unique_ptr 小巧高效;大小等同于一个指针,支持 rvalue 引用,从而可实现快速插入和对 STL 集合的检索。在头文件<memory>中。安全

unique_ptr函数

为了不和库里面的名称混淆,我本身实现的时候用的UniquePtr加以区分。spa

同一时刻,只能有一个unique_ptr指向某个内存区域,因此他是禁止拷贝的。unique_ptr自己是个对象,他生命周期结束时,会自动调用~unique_ptr(),将其所指对象销毁。unique_ptr指针与其所指对象的关系:在智能指针生命周期内,能够改变智能指针所指对象,如建立智能指针时经过构造函数指定、经过reset方法从新指定、经过release方法释放全部权、经过移动语义转移全部权。指针

主要有这几个功能:code

一、能写出异常安全的代码对象

二、在容器中保存指针blog

1 int main() 2 { 3     vector<unique_ptr<int>> vec; 4     unique_ptr<int> p(new int(5)); 5     vec.push_back(std::move(p));    // 使用移动语义
6 }

unique_ptr不支持对象间的拷贝和赋值。(困惑:class unique_ptr是否是应该继承noncopyable?但没见过这么实现的额)。继承

咱们先来看实现:生命周期

相关文章
相关标签/搜索