mardi 5 novembre 2019

Why does a lock_guard on a mutex reference produce C26110

class Foo {
public:
    mutable std::recursive_mutex _writingMutex;
    std::recursive_mutex& writingMutex() const { return _writingMutex; }
};

int main()
{
    Foo a;
    std::lock_guard<std::recursive_mutex> lock(a.writingMutex()); // produces C26110
    std::lock_guard<std::recursive_mutex> lock2(a._writingMutex); // no warning
}

The first lock produces the warning C26110:

Warning C26110 Caller failing to hold lock 'lock' before calling function 'std::lock_guard::~lock_guard'

Why is this so? Does passing the mutex as reference not work?

Aucun commentaire:

Enregistrer un commentaire