std::make_unique<std::thread> with lambda
std::make_unique<std::thread> with lambda
我正在尝试在Visual Studio 2013上编译以下代码:
std::unique_ptr<std::thread> threadPtr;
threadPtr.reset(std::make_unique<std::thread>([&]
{
//...
}));
失败并显示错误:
error C2664: 'void std::unique_ptr<std::thread,std::default_delete<_Ty>>::
reset(std::thread *) throw()' : cannot convert argument 1 from
'std::unique_ptr<std::thread,std::default_delete<_Ty>>' to 'std::thread *'
这似乎很奇怪,因为我在其他地方使用std::make_unique
没有问题。但是,当我不使用std::make_unique
而是使用new
时,它可以工作:
std::unique_ptr<std::thread> threadPtr;
threadPtr.reset(new std::thread([&]
{
//...
}));
我在这里做错了什么,还是编译器问题?
>std::make_unique
返回一个std::unique_ptr
。但std::unique_ptr::reset
期待一个指针。因此,您要查找的是:
std::unique_ptr<std::thread> threadPtr(std::make_unique<std::thread>([&]
{
//...
}));
或:
threadPtr.reset(std::make_unique<std::thread>([&]
{
//...
}).release());
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 是std :: set&lt; std :: future&gt;不可能存在
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- 使用 std::vector<boost::shared_ptr<Base_Class>> 或 boost::p tr_vector 的性能注意事项是什么<Base>
- std::map<std::set, double> AND std:<long>map< std::p air<long, long>, double>
- 如何获取std::vector<DMatch>