gpt4 book ai didi

c++ - 返回元组时如何转移 unique_ptr 的所有权?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:19 26 4
gpt4 key购买 nike

我试图返回一个元组,其中一个元素是 std::unique_ptr。我想将 unique_ptr 的所有权转让给调用者。我该怎么做?

#include <tuple>
#include <memory>
#include <iostream>

using namespace std;

class B
{
public:
B(int i) : i_(i) {}

int getI() const { return i_; }
private:
int i_;
};

tuple<unique_ptr<B>, int>
getThem()
{
unique_ptr<B> ptr(new B(10));
return make_tuple(ptr, 50);
}

int
main(int argc, char *argv[])
{

unique_ptr<B> b;
int got = 0;

tie(b, got) = getThem();

cout << "b: " << b->getI() << endl;
cout << "got: " << got << endl;

return 0;
}

编译失败是因为 unique_ptr 的复制构造函数被删除了,原因很明显。但是如何指示我想将 unique_ptr 移到 tie 中?

最佳答案

本质上,您只需将不可复制的类型显式移动到元组中,从而使用 std::movestd::tuple具有适当的构造函数来在内部复制和移动类型(移动在这里是合适的)。

如下;

#include <tuple>
#include <memory>
#include <iostream>

using namespace std;

class B
{
public:
B(int i) : i_(i) {}

int getI() const { return i_; }
private:
int i_;
};

tuple<unique_ptr<B>, int>
getThem()
{
unique_ptr<B> ptr(new B(10));
return make_tuple(std::move(ptr), 50); // move the unique_ptr into the tuple
}

int
main(int argc, char *argv[])
{
unique_ptr<B> b;
int got = 0;

tie(b, got) = getThem();

cout << "b: " << b->getI() << endl;
cout << "got: " << got << endl;

return 0;
}

关于c++ - 返回元组时如何转移 unique_ptr 的所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33030494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com