พิจารณา:
void foo() {
std::vector<std::atomic<int>> foo(10);
...
}
ตอนนี้เนื้อหาของ foo ใช้ได้หรือไม่ หรือฉันจำเป็นต้องวนซ้ำอย่างชัดเจนและเริ่มต้นได้อย่างไร ฉันได้ตรวจสอบ Godbolt แล้วและดูเหมือนดี แต่มาตรฐานดูเหมือนจะสับสนมากในจุดนี้
ตัวสร้าง:: เวกเตอร์ constructor บอกว่ามันแทรกอินสแตนซ์ที่แทรกค่าเริ่มต้นของstd::atomic<int>
ซึ่งเป็นค่าเริ่มต้นผ่านตำแหน่งnew
ผ่านทางตำแหน่ง
ฉันคิดว่าผลของการกำหนดค่าเริ่มต้นนี้ใช้:
2) ถ้า T เป็นประเภทคลาสที่มีคอนสตรัคเตอร์เริ่มต้นที่ไม่ได้จัดเตรียมโดยผู้ใช้หรือลบออก (นั่นคือมันอาจเป็นคลาสที่มีคอนสตรัคเตอร์ปริยายที่กำหนดหรือเป็นค่าปริยาย) วัตถุจะเป็นศูนย์เริ่มต้นแล้ว เริ่มต้นได้เริ่มต้นถ้ามันมีตัวสร้างเริ่มต้นที่ไม่สำคัญ;
สำหรับฉันแล้วดูเหมือนว่าอะตอมมิกนั้นถูกกำหนดค่าเริ่มต้นเป็นศูนย์ ดังนั้นคำถามก็คือ a - initialisation ไม่เป็นศูนย์ของstd::atomic<int>
ทำให้ผลลัพธ์เป็นวัตถุที่ถูกต้องเป็นศูนย์หรือไม่?
ฉันจะเดาว่าคำตอบคือ "ใช่ในทางปฏิบัติ แต่ยังไม่ได้กำหนดจริงๆ"?
หมายเหตุ: คำตอบนี้ยอมรับว่ามันเป็นค่าเริ่มต้นเป็นศูนย์ แต่ไม่ได้พูดจริง ๆ ถ้านั่นหมายความว่าวัตถุนั้นถูกต้อง
atomic_init
หรือใช้งานจริง คุณต้องซิงโครไนซ์รอบรหัสในคำถามต่อไป