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()
で初期化する。この初期化はアトミック操作ではないことに注意
- C++17 :
- (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で宣言のみ行う手法で代用されている。