最終更新日時(UTC):
が更新

履歴 編集

function
<atomic>

std::atomic::コンストラクタ(C++11)

atomic() noexcept = default;                       // (1) C++11
constexpr atomic()
  noexcept(is_nothrow_default_constructible_v<T>); // (1) C++20

constexpr atomic(T desired) noexcept;              // (2) C++11

atomic(const atomic&) = delete;                    // (3) C++11
atomic(atomic&&) = delete;                         // (4) C++11

概要

  • (1) : デフォルトコンストラクタ
  • (2) : desiredでオブジェクトを初期化する
  • (3) : コピーコンストラクタ。コピー不可
  • (4) : ムーブコンストラクタ。ムーブ不可

効果

  • (1) :
    • C++17 : atomicオブジェクトを未初期化状態にする (C言語との互換性のため)
    • C++20 : atomicオブジェクトをT()で初期化する。この初期化はアトミック操作ではないことに注意
  • (2) :
    • パラメータdesiredの値を、メンバ変数として保持する。この初期化はアトミック操作ではないことに注意

例外

  • (1) :
    • C++17 : 投げない
    • C++20 : 型Tのデフォルトコンストラクタ例外を投げない場合、この関数は例外を投げない
  • (2) :
    • 投げない

#include <iostream>
#include <atomic>

int main()
{
  // デフォルト構築。
  // C++17までは不定値、
  // C++20からは値ゼロで初期化される
  std::atomic<int> a;

  // 値を指定して初期化
  std::atomic<int> b(3);

  std::cout << b.load() << std::endl;
}

出力

3

バージョン

言語

  • C++11

処理系

  • Clang: ??
  • GCC: 4.7.0
  • ICC: ??
  • Visual C++: 2012, 2013
    • 2012はコピーコンストラクタのdeleteに対応していないため、代わりにprivateで宣言のみ行う手法で代用されている。

参照