std::unique_lock<Mutex>::operator=
unique_lock& operator=( unique_lock&& other ) noexcept; | (начиная с C++11) |
Оператор перемещающего присваивания. Эквивалентен unique_lock{std::move(other)}.swap(*this); return *this;.
Если other является тем же объектом, что и *this, эффект отсутствует. В противном случае, если до вызова *this связан с мьютексом и получил владение им, мьютекс разблокируется.
Параметры
| other | - | другой unique_lock, которым заменяется состояние |
Возвращаемое значение
*this
Примечания
При использовании рекурсивного мьютекса возможно, что и *this, и other владеют одним и тем же мьютексом до присваивания. В этом случае после присваивания мьютексом будет владеть *this, а other — нет.
Перемещающее присваивание может привести к неопределённому поведению. Например, если *this создан с помощью std::adopt_lock, но вызывающий поток не владеет связанным мьютексом, владение связанным мьютексом не может быть корректно освобождено.
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение согласно опубликованной версии | Правильное поведение |
|---|---|---|---|
| LWG 2104 | C++11 | оператор перемещающего присваивания имел спецификатор noexcept, но мог приводить к неопределённому поведению | спецификатор noexcept удалён |
| LWG 4172 | C++11 |
LWG2104 удалил noexcept самоперемещающее присваивание unique_lock было задано неверно |
noexcept восстановлен поведение уточнено как отсутствие действия |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/unique_lock/operator%3D