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

new*_*mer 9 c++ smart-pointers

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

但是,当我尝试使用a时,我得到一个编译错误unique_ptr,就好像为unique_ptrs 禁用了复制赋值一样.通过unique_ptr引用传递似乎不会转移所有权,它只是给函数一个引用unique_ptr.

如何auto_ptr将所有权转移到与unique_ptrs 一起使用的功能?我希望得到一个详细教程的链接unique_ptr,因为到目前为止,我所阅读的内容似乎只是谈论auto_ptr或讨论Boost提供的智能指针,似乎忽略了unique_ptr因为shared_ptr它涵盖了它.

Pup*_*ppy 14

但是,当我尝试使用unique_ptr执行此操作时出现编译错误,就像对unique_ptrs禁用了复制分配一样.

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

为了使用unique_ptr,您必须了解移动语义.

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

  • 为"最好忘记这堂课曾经存在过." (6认同)