Как создать unique_ptr для пары, элементы которой (vector и int) также являются unique_ptr? - PullRequest
0 голосов
/ 10 марта 2019

Я искал. но не могу найти четкий ответ. Поэтому я создал новый вопрос. Коды указаны ниже:

using namespace std;

using pairfortsp = pair<unique_ptr<vector<int>>, unique_ptr<int>>;

int main(int argc, char *argv[]){
    unique_ptr<vector<int>> tmpptr1(new vector<int>{1});
    unique_ptr<int> tmpptr2(new int(1));
    unique_ptr<pairfortsp> tmpptr3(new pairfortsp<tmpptr1,tmpptr2>);
}

Когда я его скомпилировал, я получил две ошибки:

stackover.cpp:25:50: error: invalid operands to binary expression ('pairfortsp *' (aka
      'pair<unique_ptr<vector<int> >, unique_ptr<int> > *') and 'unique_ptr<vector<int> >')
    unique_ptr<pairfortsp> tmpptr3(new pairfortsp<tmpptr1,tmpptr2>);
..................
stackover.cpp:25:67: error: expected expression
    unique_ptr<pairfortsp> tmpptr3(new pairfortsp<tmpptr1,tmpptr2>);

Итак, как правильно создать unique_ptr для пары, подобной той, которую я объявил?

Спасибо.

1 Ответ

1 голос
/ 10 марта 2019

Похоже, вы пытаетесь передать аргументы конструктора std::pair в качестве параметров шаблона. То есть вы использовали < > вместо ( ).

Кроме того, поскольку unique_ptr не может быть скопировано, вы должны std::move их передать их конструктору.

Следующий код компилируется с g++ -std=c++17 Move.cc.

#include <vector>
#include <memory>
#include <utility>

using namespace std;

using pairfortsp = pair<unique_ptr<vector<int>>, unique_ptr<int>>;

int main(int argc, char *argv[]){
    unique_ptr<vector<int>> tmpptr1(new vector<int>{1});
    unique_ptr<int> tmpptr2(new int(1));
    unique_ptr<pairfortsp> tmpptr3(new pairfortsp(std::move(tmpptr1),std::move(tmpptr2)));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...