Skip to content

Latest commit

 

History

History
70 lines (52 loc) · 2.44 KB

op_assign.md

File metadata and controls

70 lines (52 loc) · 2.44 KB

operator=

  • mutex[meta header]
  • std[meta namespace]
  • unique_lock[meta class]
  • function[meta id-type]
  • cpp11[meta cpp]
unique_lock& operator=(const unique_lock&) = delete; // (1) C++11
unique_lock& operator=(unique_lock&& u) noexcept;    // (2) C++11
unique_lock& operator=(unique_lock&& u);             // (2) C++14
unique_lock& operator=(unique_lock&& u) noexcept;    // (2) C++26

概要

  • (1) : コピー代入。コピー不可。
  • (2) : ムーブ代入。

効果

  • (2) : owns_lock() == trueだった場合、unlock()を呼び出す。unique_lockオブジェクトuが保持しているミューテックスの所有権を自分のオブジェクトに移動する。ミューテックスオブジェクトへのポインタおよびowns_lock()の状態をuから移動する。
    • C++26 : unique_lock{std::move(u)}.swap(*this)と等価に規定され、自己ムーブ代入も安全に扱われる。

事後条件

  • (2) : uはミューテックスオブジェクトへの有効なポインタを指さず、owns_lock() == falseとなる。

例外

  • (2) : 投げない

例

#include <mutex>
#include <utility>

int main()
{
  std::mutex mtx;
  {
    std::unique_lock<std::mutex> lk1(mtx);
    std::unique_lock<std::mutex> lk2;

    // lk1からミューテックスオブジェクトの所有権を移動する
    lk2 = std::move(lk1);
  } // lk1はunlock()せず、lk2がunlock()する
}
  • std::move[link /reference/utility/move.md]

出力

バージョン

言語

  • C++11

処理系

  • Clang: 9.0.1 [mark verified]
  • GCC: 4.7.0 [mark verified]
  • Visual C++: 2012 [mark verified], 2013 [mark verified], 2015 [mark verified]

参照