struct Threadsafe

Конструктор Threadsafe(Threadsafe other) недопустим как копирующий, а std::mutex нельзя копировать или присваивать. Для копирования данных нужен новый mutex и согласованный снимок other.

Короткий ответ

Что ответить на собеседовании

Конструктор Threadsafe(Threadsafe other) недопустим как копирующий, а std::mutex нельзя копировать или присваивать. Для копирования данных нужен новый mutex и согласованный снимок other.

Подробный разбор

Ответ с пояснениями

Условие

struct Threadsafe { Threadsafe() = default; Threadsafe(Threadsafe other){ this->mutex = other.mutex; }

std::mutex mutex;

A a;
B b;
// ...

};

Ответ

Конструктор Threadsafe(Threadsafe other) недопустим как копирующий, а std::mutex нельзя копировать или присваивать. Для копирования данных нужен новый mutex и согласованный снимок other.

Если копирование вообще не нужно, явно удалите copy-конструктор и оператор присваивания. Если нужно — принимайте const Threadsafe&, создавайте собственный mutex и копируйте a/b под блокировкой источника; mutex для блокировки const-источника обычно делают mutable.

Способ инициализации a/b зависит от их конструкторов: присваивание в теле не подходит недефолтно-конструируемым типам, тогда нужен отдельный snapshot/helper. Для присваивания блокируют оба объекта без deadlock, учитывают self-assignment и исключения. Само имя Threadsafe не обеспечивает безопасность доступа к публичным a/b.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее