C ++

可能重复:
std :: auto_ptr到std :: unique_ptr
什么C ++智能指针实现可用?

可以说我有这个struct

struct bar 
{ 

};

当我像这样使用auto_ptr时

void foo() 
{ 
   auto_ptr<bar> myFirstBar = new bar; 
   if( ) 
   { 
     auto_ptr<bar> mySecondBar = myFirstBar; 
   } 
}

然后在auto_ptr<bar> mySecondBar = myFirstBar; C ++将myFirstBar的所有权转移给mySecondBar,并且没有编译错误。

但是当我使用unique_ptr而不是auto_ptr时,我得到一个编译器错误。 为什么C ++不允许这样做? 这两个智能指针的主要区别是什么? 当我需要使用什么?


std::auto_ptr<T>可能会悄悄地窃取资源。 这可能会引起混淆,并试图定义std::auto_ptr<T> ,以免让你这样做。 使用std::unique_ptr<T>所有权不会从您仍然拥有的任何内容中悄悄地转移。 它将所有权仅从没有处理的对象转移到(临时)或即将离开的对象(对象即将离开函数中的范围)。 如果你真的想转移所有权,你可以使用std::move()

std::unique_ptr<bar> b0(new bar());
std::unique_ptr<bar> b1(std::move(b0));
链接地址: http://www.djcxy.com/p/59673.html

上一篇: c++

下一篇: c++