将 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&lt;...&gt;(...)) @NathanOliver 哦,就这么简单。我想您应该发布一个答案,以便我可以接受它,因为它解决了问题。 @user7860670 我知道我必须移动而不是复制,我只是不认为我可以在 std::get 的输出上调用 std::move 您可以std::move(std::get&lt;&gt; ...std::get&lt;&gt;(std::move(...。要么工作。移动变体或移动 unique_ptr。 【参考方案1】:

你需要std::movestd::unique_ptrstd::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&lt;std::unique_ptr&lt;something&gt;&gt;(std::move(a_variant));

如果你不喜欢std::move,你可以使用std::shared_ptr,它是可复制的。

【讨论】:

以上是关于将 unique_ptr 移出变体 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

智能指针unique_ptr用法

uni-app 13标星朋友和加入移出黑名单

将所有权从 unique_ptr<T,void(*)(T*)> 转移到 unique_ptr<const T,void(*)(const T*)>

C++11之 unique_ptr

复制接口的 std::unique_ptr [关闭]

unique_ptr 比原始指针快吗? C++ [关闭]