首页 >后端开发 >C++ >如何正确地将 `std::unique_ptr` 推入 `std::vector` 中?

如何正确地将 `std::unique_ptr` 推入 `std::vector` 中?

Linda Hamilton
Linda Hamilton原创
2024-12-28 13:07:16482浏览

How Can I Correctly Push a `std::unique_ptr` into a `std::vector`?

无法将 Unique_Ptr 推回向量

提供的代码尝试将 std::unique_ptr 推回向量,这会导致由于无法对唯一指针执行复制操作而导致编译错误。

回想一下std::unique_ptr 确保所包含的指向特定对象的指针的独占所有权。这意味着当分配唯一指针时,所有权被移动而不是复制。因此,禁止复制唯一指针,因为多个所有者将违反其唯一所有权保证。

要解决此问题并将唯一指针正确推入向量,请使用 std::move 函数,如下所示:

vec.push_back(std::move(ptr2x));

std::move 将唯一指针的所有权转移给向量,使其能够在不违反唯一所有权的情况下插入到向量中

需要注意的是,这段代码中 std::unique_ptr 的初始用法是不正确的。它尝试管理指向局部变量的指针,这与对对象生命周期所需的控制相矛盾。为了防止这种差异,请使用动态分配对象,例如:

std::unique_ptr<int> ptr(new int(1));

以上是如何正确地将 `std::unique_ptr` 推入 `std::vector` 中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn