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++