试图引用一个被删除的函数,VS 2015

Attempting to reference a deleted function, VS 2015

本文关键字:删除 函数 2015 VS 一个 引用      更新时间:2023-10-16

下面的代码用于编译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...);
        }
    }
}

错误是第一个语句:

auto guard = std::lock_guard<std::mutex>(Mutex)

互斥对象只是一个std::互斥对象。有人能解释一下为什么这是一个错误吗?

编辑:我也得到了这里的这行代码:

auto converter = std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>>();

如果你看到这个std::lock_guard构造函数引用,你会看到在你的声明中调用的复制构造函数被标记为已删除。

解决这个问题最简单的方法是不使用复制构造函数形式的初始化,而是直接初始化:
std::lock_guard<std::mutex> guard(Mutex);