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

9
我正在尝试学习如何使用智能指针并理解所有权。当我通过值传递一个 auto_ptr 到函数时,该函数会独占该指针的所有权。因此,当函数完成时,它删除了我传递给它的指针。
然而,当我尝试使用 unique_ptr 进行这样的操作时,会出现编译错误,好像 unique_ptr 的复制赋值被禁用了一样。将 unique_ptr 按引用传递似乎并不会转移所有权,只是给函数一个对 unique_ptr 的引用。
我该如何使用传递所有权到函数的 auto_ptr 行为来处理 unique_ptr?我需要一个关于 unique_ptr 的详细教程链接,因为到目前为止我阅读过的教程似乎只谈论 auto_ptr 或讨论 Boost 提供的智能指针,并似乎忽略了 unique_ptr,因为 shared_ptr 已经涵盖了它。
1个回答

14
然而,当我尝试使用unique_ptr时,会出现编译错误,好像unique_ptrs禁用了复制赋值一样。
确实如此。 unique_ptr只有一个所有者,因此无法进行复制,因为这将导致两个所有者。为了按值传递到另一个函数中,原始所有者必须放弃所有权,使用std :: move。
为了使用unique_ptr,您必须理解移动语义。
auto_ptr只是对真正移动语义的粗略近似,实际上并不起作用。最好忘记这个类曾经存在过。

@DeadMG 那是一个很棒的链接答案。不过我还在想一件事:当传递的 unique_ptr 超出作用域时会发生什么?这就像删除 NULL 一样吗? - newprogrammer
1
@newprogrammer:什么也没有。它没有拥有任何资源,所以什么都不会发生。 - Puppy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接