std::vector
などの移動コンストラクターまたはコピー コンストラクターを使用せずに、固定サイズのオブジェクトを構築したいとしstd::atomic<int>
ます。この場合、基礎となるクラスには、デフォルトのコンストラクター (値を 0 に初期化する) だけでなく、std::atomic
引数を取る 1 引数のコンストラクターがあります。int
の作成の一部として引数が最初にベクトルの要素型に変換され、コピーまたは移動コンストラクターが呼び出されるため、initializer_list
構文 likeの使用はstd::vector<std::atomic<int>> v{1,2,3}
機能しません。T
initializer_list
特定のケースではstd::atomic<int>
、ベクトルをデフォルトで構築し、その後要素を変更できます。
std::vector<std::atomic<int>> v(3);
v[0] = 1;
v[1] = 2;
v[2] = 3;
ただし、見苦しく非効率であることに加えて、適切なコンストラクターを呼び出すことによって得られるものと同等の構築後の突然変異を多くのオブジェクトが提供しない可能性があるため、これは一般的な解決策ではありません。
ベクトルの構築で必要な「定位置のような」動作を取得する方法はありますか?