Построить пару unique_ptr <int>и int - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь создать пару 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.

1 Ответ

3 голосов
/ 14 марта 2019

Вы не можете копировать уникальные указатели.В конце концов, копия не будет уникальной.Вместо этого переместите:

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

Вы также можете перейти от lvalue, если вам нужно, преобразовав lvalue в rvalue с помощью std::move:

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