使用std :: unique_ptr将所有权转移到函数

时间:2012-07-16 00:29:07

标签: c++ smart-pointers

我正在尝试学习如何使用智能指针并了解所有权。当我通过值将auto_ptr传递给函数时,该函数将获取该指针的独占所有权。因此,当函数完成时,它会删除我传递给它的指针。

但是,当我尝试使用unique_ptr执行此操作时出现编译错误,就好像unique_ptr禁用了复制分配一样。通过引用传递unique_ptr似乎不会转移所有权,它只是为函数提供对unique_ptr的引用。

如何通过将所有权传递给函数来使用auto_ptr来获得unique_ptr的行为?我希望链接到unique_ptr的详细教程,因为到目前为止,我所阅读的内容似乎只谈auto_ptr或谈论Boost可用的智能指针而且似乎忽略了{{} 1}}因为unique_ptr涵盖了它。

1 个答案:

答案 0 :(得分:14)

  

但是,当我尝试使用a时,我收到编译错误   unique_ptr,就像为unique_ptrs禁用了复制赋值一样。

是的。 unique_ptr拥有一个且只有一个拥有者。它无法复制,因为这会导致两个所有者。为了将其按值传递到另一个函数,原始所有者必须使用std::move放弃所有权。

要使用unique_ptr,您必须了解move semantics

auto_ptr只是对真实移动语义的一种hacky近似,实际上并不起作用。最好忘记这个曾经存在过的课程。