如何为对元素(向量和int)配对创建unique_ptr也是unique_ptr

How to create unique_ptr for pair which elements(vector and int) are also unique_ptr?

本文关键字:unique ptr 创建 也是 元素 向量 int      更新时间:2023-10-16

我已经搜索过。但是找不到明确的答案。所以我创建了一个新问题。代码如下:

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的正确步骤是什么?

谢谢。

看起来您正在尝试将构造函数参数作为模板参数传递给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)));
}