विचार करें:
void foo() {
std::vector<std::atomic<int>> foo(10);
...
}
क्या अब फू की सामग्री मान्य है? या क्या मुझे स्पष्ट रूप से लूप के माध्यम से और उन्हें इनिशियलाइज़ करने की आवश्यकता है? मैंने गॉडबोल्ट पर जाँच की है और यह ठीक लगता है, हालाँकि इस बिंदु पर मानक बहुत उलझा हुआ लगता है।
Std :: वेक्टर निर्माता यह सम्मिलित करता है का कहना है कि डिफ़ॉल्ट-डाला के उदाहरण std::atomic<int>
है, जो कर रहे हैं initialised मूल्य प्लेसमेंट के माध्यम से new
।
मुझे लगता है कि मूल्य आरंभ का यह प्रभाव लागू होता है:
2) यदि T एक डिफॉल्ट कंस्ट्रक्टर के साथ एक वर्ग प्रकार है जो न तो उपयोगकर्ता-प्रदान किया गया है और न ही हटाया गया है (अर्थात, यह एक ऐसा वर्ग हो सकता है जो अनुमानित रूप से परिभाषित या डिफॉल्ट डिफॉल्ट कंस्ट्रक्टर हो), ऑब्जेक्ट शून्य-आरंभीकृत है और फिर यह है यदि यह एक गैर-तुच्छ डिफ़ॉल्ट रचनाकार है तो डिफ़ॉल्ट-आरंभिक;
तो मुझे ऐसा लगता है कि परमाणु शून्य-प्रारंभिक हैं। तो सवाल यह है कि क्या std::atomic<int>
किसी मान्य वस्तु में परिणाम का शून्य-आरंभ होता है ?
मैं अनुमान लगाने जा रहा हूं कि उत्तर "हां व्यवहार में है लेकिन यह वास्तव में परिभाषित नहीं है"?
नोट: यह उत्तर सहमत है कि यह शून्य-आरंभीकृत है, लेकिन वास्तव में यह नहीं कहता है कि इसका मतलब है कि वस्तु वैध है।
atomic_init
। आपको पहले से ही प्रश्न में कोड के आसपास पहले से सिंक्रनाइज़ करना होगा