名前空間
変種
操作

std::unique_lock<Mutex>::operator=

From cppreference.com
< cpp‎ | thread‎ | unique lock
 
 
並行性サポートライブラリ
スレッド
(C++11)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
協調的なキャンセル
排他制御
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
安全なメモリ解放 (Safe Reclamation)
(C++26)
ハザードポインタ
アトミック型
(C++11)
(C++20)
アトミック型の初期化
(C++11)(C++20で非推奨)
(C++11)(C++20で非推奨)
メモリオーダー
(C++11)(C++26で非推奨)
アトミック操作のためのフリー関数
アトミックフラグのためのフリー関数
 
 
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` が復元されました。
何もしない操作として再仕様化されました。
English 日本語 中文(简体) 中文(繁體)