Код IT
← Каталог

Типы данных в C++ — `mutable`

Фрагмент из «Типы данных в C++»: `mutable`.

C++ main.cpp
#include <iostream>
#include <mutex>
#include <string>

class ThreadSafeLogger {
private:
    mutable std::mutex mtx_;          // защищает внутреннее состояние
    mutable std::string last_message_; // кэш последнего сообщения

public:
    void log(const std::string& msg) const {
        // Метод const, но мы можем менять mutable-поля
        std::lock_guard<std::mutex> lock(mtx_);
        last_message_ = msg;
        std::cout << "[LOG] " << msg << '\n';
    }

    std::string getLastMessage() const {
        std::lock_guard<std::mutex> lock(mtx_);
        return last_message_;
    }
};

int main() {
    const ThreadSafeLogger logger;
    logger.log("Запуск системы");
    logger.log("Обработка данных");

    std::cout << "Последнее: " << logger.getLastMessage() << '\n';

    return 0;
}
#include <iostream>
#include <mutex>
#include <string>

class ThreadSafeLogger {
private:
    mutable std::mutex mtx_;          // защищает внутреннее состояние
    mutable std::string last_message_; // кэш последнего сообщения

public:
    void log(const std::string& msg) const {
        // Метод const, но мы можем менять mutable-поля
        std::lock_guard<std::mutex> lock(mtx_);
        last_message_ = msg;
        std::cout << "[LOG] " << msg << '\n';
    }

    std::string getLastMessage() const {
        std::lock_guard<std::mutex> lock(mtx_);
        return last_message_;
    }
};

int main() {
    const ThreadSafeLogger logger;
    logger.log("Запуск системы");
    logger.log("Обработка данных");

    std::cout << "Последнее: " << logger.getLastMessage() << '\n';

    return 0;
}