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

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

unique_ptr

为了避免和库里面的名称混淆,我自己实现的时候用的UniquePtr加以区分。

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

主要有这几个功能:

1、能写出异常安全的代码

2、在容器中保存指针

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?但没见过这么实现的额)。

我们先来看实现:

 

posted @ 2018-02-25 11:53  guhowo  阅读(1714)  评论(2编辑  收藏  举报