unique_ptr VS auto_ptr



可能的重复项:
std::auto_ptr to 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));

相关内容

  • 没有找到相关文章

最新更新