将 unique_ptr 移出变体 [关闭]
Posted
技术标签:
【中文标题】将 unique_ptr 移出变体 [关闭]【英文标题】:Move unique_ptr outside of variant [closed] 【发布时间】:2021-07-27 16:51:40 【问题描述】:我在一个变体中有一个 unique_ptr。我正在尝试这样做:
if(std::holds_alternative<std::unique_ptr<something>>(a_variant))
auto thing = std::get<std::unique_ptr<something>>(a_variant);
显然它不起作用,但是如何将指针移到变体之外?
【问题讨论】:
你需要move
指针,而不是复制。
... = std::move(std::get<...>(...))
@NathanOliver 哦,就这么简单。我想您应该发布一个答案,以便我可以接受它,因为它解决了问题。
@user7860670 我知道我必须移动而不是复制,我只是不认为我可以在 std::get 的输出上调用 std::move
您可以std::move(std::get<> ...
或std::get<>(std::move(...
。要么工作。移动变体或移动 unique_ptr。
【参考方案1】:
你需要std::move
std::unique_ptr
出std::variant
。
struct something final ;
std::variant a_variant(std::make_unique<something>());
if(std::holds_alternative<std::unique_ptr<something>>(a_variant))
auto thing = std::move(std::get<std::unique_ptr<something>>(a_variant));
或者,auto thing = std::get<std::unique_ptr<something>>(std::move(a_variant));
如果你不喜欢std::move
,你可以使用std::shared_ptr
,它是可复制的。
【讨论】:
以上是关于将 unique_ptr 移出变体 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将所有权从 unique_ptr<T,void(*)(T*)> 转移到 unique_ptr<const T,void(*)(const T*)>