unique_ptr和auto_ptr

shienh 2020年02月18日 239次浏览

auto_ptr 由 C98 引入,unique_ptr由C11引入,现在已经可以完全用unique_ptr替代auto_ptr。

    auto_ptr<int>ps(new int (10));
    auto_ptr<int>v;
    v=ps;
    cout<<&ps<<"   "<<*ps<<endl;

运行结果如下:
image.png

变量v获取了变量ps指针的所有权,auto_ptr不共享它所指向的对象,此时变量ps指向的内容为NULL,可以用 if(ps->get == NULL)进行判断。同样
unique_ptr也不共享它所指向的对象。

    unique_ptr<int>ps(new int (10));
    unique_ptr<int>v;
    v=ps;
    cout<<&ps<<"   "<<*ps<<endl;

但是,在unique_ptr报错是在编译期,auto_ptr是在运行期。
image.png

unique_ptr可以通过move进行控制权转移,如下,此时p1指向空

    unique_ptr<int> p1(new int(10));
    unique_ptr<int> p2 = std::move(p1);

unique_ptr 可放在容器中,弥补了 auto_ptr 不能作为容器元素的缺点。