【发布时间】:2015-08-12 05:47:22
【问题描述】:
我想在 lambda 中传递一个原始指针,但如果未调用 lambda,我不希望它被泄露。它看起来像这样:
void Clean(std::unique_ptr<int>&& list);
void f(int* list) {
thread_pool.Push([list = std::unique_ptr<int>(list) ] {
Clean(std::move(list)); // <-- here is an error.
});
}
我在 Clang 3.7.0 中遇到错误:
错误:将对“unique_ptr”类型的引用绑定到“unique_ptr”类型的值删除限定符
但我一开始没有看到任何限定词,尤其是被丢弃了。
另外,我在邮件列表中发现了类似的report,但没有答案。
我应该如何修改我的代码,使其编译并按语义预期工作?
【问题讨论】:
-
什么是
Clean()?当我尝试在 clang 上重现时,假设Clean()采用unique_ptr的值,我得到“错误:调用std::unique_ptr<int>的已删除构造函数,这更有意义。 -
@Barry 在原始错误之后我没有预料到任何其他错误。现在我正在尝试修复所有其他问题并更新问题中的代码,以便原始错误将是唯一的错误。
标签: c++ lambda c++14 move-semantics