Mempertimbangkan:
void foo() {
std::vector<std::atomic<int>> foo(10);
...
}
Apakah konten foo sekarang valid? Atau apakah saya perlu secara eksplisit mengulang dan menginisialisasi mereka? Saya telah memeriksa Godbolt dan tampaknya baik-baik saja, namun standar tampaknya sangat membingungkan pada titik ini.
The std :: vector konstruktor mengatakan itu menyisipkan default-dimasukkan contoh std::atomic<int>
, yang nilai dijalankan melalui penempatan new
.
Saya pikir efek inisialisasi nilai ini berlaku:
2) jika T adalah tipe kelas dengan konstruktor default yang tidak disediakan pengguna atau dihapus (yaitu, mungkin kelas dengan konstruktor default yang didefinisikan secara implisit atau default), objek tersebut diinisialisasi nol dan kemudian diinisialisasi diinisialisasi default jika memiliki konstruktor default non-sepele;
Jadi bagi saya tampaknya atom diinisialisasi nol. Jadi pertanyaannya adalah, apakah inisialisasi nol std::atomic<int>
hasil dalam objek yang valid?
Saya akan menebak bahwa jawabannya adalah "ya dalam praktek tetapi tidak benar-benar didefinisikan"?
Catatan: Jawaban ini setuju bahwa ini nol-diinisialisasi, tetapi tidak benar-benar mengatakan jika itu berarti bahwa objek tersebut valid.
atomic_init
. Anda tetap harus menyinkronkan sekitar kode dalam pertanyaan