我已经搜寻了。但找不到明确的答案。因此,我提出了一个新问题。代码如下:

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进行编译。

#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)));
}

关于c++ - 如何为一对中的哪些元素( vector 和整数)也是unique_ptr创建unique_ptr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55083292/

10-10 16:37