c++ - 构造一对 unique_ptr<int> 和 int

标签 c++ compiler-errors stl std-pair

我正在尝试创建一对 int 和一个 unique_ptr。我应该如何使用 make_pair 来创建它?

#include <string>
#include <memory>
#include <algorithm>

int main()
{
    std::unique_ptr<int> p = std::make_unique<int>(0);
    std::pair<int, std::unique_ptr<int>> pr = std::make_pair((int)0, p);
}

我遇到了以下问题,

Error   C2440   '<function-style-cast>': cannot convert from 'initializer list' to '_Mypair'    templpairuniqueptr  c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.15.26726\include\utility 405 

我不明白为什么会这样。我在 MSVC 上。

最佳答案

您不能复制唯一指针。毕竟,拷贝不会是唯一的。改为移动:

auto pr = std::make_pair(
    0, std::make_unique<int>(0)
);

如果需要,您也可以从左值移动,方法是使用 std::move 将左值转换为右值:

auto pr = std::make_pair(
    0, std::move(p)
);

关于c++ - 构造一对 unique_ptr<int> 和 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55166434/

相关文章:

c++ - 在具有不同输出的过程相似的函数中防止代码重复?

java - 我在println中不断收到 “error:Cannot find symbol”

java - 非常奇怪的语法错误

c++ - STL 是否为其 header 指定了 header 保护?

c++ - 如何更改适配器容器的基本底层容器类型?

c++ - 编译器编译一个 'io_service_' 变量显示为 : cannot appear in a constant-expression

c++ - 无法填充作为类成员的数组。 C++

c++ - libpq 中的查询流水线在哪里?

c# - 为什么SubscribeOn在这里不能作为扩展方法而是直接调用?

c++ - 关于 std::transform 的混淆 - 将 std::map 的 value_type::second 转换为 std::vector