std::unique_lock<Mutex>:: operator=
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
unique_lock::operator=
|
||||
| Locking | ||||
| Modifiers | ||||
| Observers | ||||
| Non-member functions | ||||
|
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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2104 | C++11 | оператор перемещающего присваивания был noexcept но мог иметь неопределённое поведение | noexcept удалён |
| LWG 4172 | C++11 |
LWG2104
удалил
noexcept
самоприсваивание перемещением
unique_lock
было некорректно специфицировано
|
noexcept
восстановлен
переспецифицирован как no-op |