我正在尝试学习如何使用智能指针并了解所有权。当我通过值将auto_ptr
传递给函数时,该函数将获取该指针的独占所有权。因此,当函数完成时,它会删除我传递给它的指针。
但是,当我尝试使用unique_ptr
执行此操作时出现编译错误,就好像unique_ptr
禁用了复制分配一样。通过引用传递unique_ptr
似乎不会转移所有权,它只是为函数提供对unique_ptr
的引用。
如何通过将所有权传递给函数来使用auto_ptr
来获得unique_ptr
的行为?我希望链接到unique_ptr
的详细教程,因为到目前为止,我所阅读的内容似乎只谈auto_ptr
或谈论Boost可用的智能指针而且似乎忽略了{{} 1}}因为unique_ptr
涵盖了它。
答案 0 :(得分:14)
但是,当我尝试使用a时,我收到编译错误 unique_ptr,就像为unique_ptrs禁用了复制赋值一样。
是的。 unique_ptr
拥有一个且只有一个拥有者。它无法复制,因为这会导致两个所有者。为了将其按值传递到另一个函数,原始所有者必须使用std::move
放弃所有权。
要使用unique_ptr
,您必须了解move semantics。
auto_ptr
只是对真实移动语义的一种hacky近似,实际上并不起作用。最好忘记这个曾经存在过的课程。