Почему мьютекс доступен в теле лямбда-выражения, если его никто явно не захватил?

Я представлю фрагмент кода, где явно используется мьютекс внутри лямбда-выражения. При этом, он, мьютекс, не захватывается, а остаётся доступен, что и вызвало интерес.

class session {
private: 
    void do_read() {
        auto self(shared_from_this());
        socket_.async_read_some(
            boost::asio::buffer(data_),
            [this, self](boost::system::error_code ec, std::size_t length) {
                std::lock_guard<std::mutex>g(mtx);
                //...
            });
    }
    
    // One mutex for all sessions
    static std::mutex mtx;
};

Почему у программиста есть право явно использовать не захваченный мьютекс в теле лямбда-выражения?


Ответы (0 шт):