我正在尝试在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());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句