我想在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<[2 * ...]>' 的值,该值的类型为 'unique_ptr<[2 * ...]>' 会丢失限定符
但我一开始看不到任何限定符,尤其是被丢弃的。
另外,我在邮件列表中发现了类似的报告,但没有回答。
我应该如何修改我的代码,以便它能被编译并按语义正常工作?
Clean()
?当我在 clang 上尝试重现时,假设Clean()
通过值传递一个unique_ptr
,我得到了“error: call to deleted constructor ofstd::unique_ptr<int>
”的错误提示,这更有意义。 - Barry