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 が関連付けられたミューテックスを持ち、その所有権を取得している場合、ミューテックスはアンロックされます。
目次 |
パラメータ
| その他 | - |
状態を置き換える別の
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
を復元
何も行わない操作として再仕様化 |