Rob*_*son 1 c++ visual-studio-2015
以下用于使用Visual Studio 2013进行编译,但现在在Visual Studio 2015中提供错误"尝试引用已删除的函数".
template<typename... Args>
void operator()(Args && ... args)
{
auto guard = std::lock_guard<std::mutex>(Mutex);
{
Clean();
for (auto const & listener : Listeners)
{
if(auto locked = std::get<0>(listener).lock())
std::get<1>(listener)(args...);
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误是第一个声明:
auto guard = std::lock_guard<std::mutex>(Mutex)
Run Code Online (Sandbox Code Playgroud)
Mutex只是一个std :: mutex.任何人都可以解释为什么现在这是一个错误?
编辑:我也在这里使用这行代码:
auto converter = std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>>();
Run Code Online (Sandbox Code Playgroud)
如果您看到例如此std::lock_guard构造函数引用,您将看到在声明中调用的复制构造函数被标记为已删除.
解决它的最简单方法是不使用copy-constructor形式的初始化,而是直接初始化:
std::lock_guard<std::mutex> guard(Mutex);
Run Code Online (Sandbox Code Playgroud)