9

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

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

如何auto_ptr通过将所有权传递给与 s 一起工作的函数来获得 s 的行为unique_ptr?我希望有一个详细教程的链接unique_ptr,因为到目前为止,我读过的那些似乎只谈论auto_ptr或谈论 Boost 可用的智能指针,并且似乎忽略了它,unique_ptr因为shared_ptr它涵盖了它。

4

1 回答 1

14

但是,当我尝试使用 unique_ptr 执行此操作时出现编译错误,好像为 unique_ptr 禁用了复制分配。

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

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

auto_ptr只是对真正不起作用的真正移动语义的一种粗略的近似。最好干脆忘记这个类曾经存在过。

于 2012-07-16T00:31:43.543 回答