2015-03-27 3 views
8

सी ++ 11 (और सी ++ 14) एसटीएल कंटेनर में noexcept विध्वंसक और clear() सदस्य कार्य हैं।क्या एसटीएल कंटेनर तत्व स्पष्ट रूप से विनाशकारी (अस्वीकार्य) होने की आवश्यकता है?

इसका तात्पर्य है कि तत्वों में noexcept विध्वंसक भी हो सकते हैं, या कम से कम कंटेनरों में संग्रहीत वास्तविक तत्वों को नष्ट होने पर किसी भी अपवाद को फेंकना नहीं चाहिए- या अधिक सही ढंग से, allocator_traits<Allocator>::destroy कॉल को फेंकना नहीं चाहिए।

क्या यह मानक में कहीं भी एक आवश्यकता (स्पष्ट रूप से या किसी अन्य स्पष्ट आवश्यकता से निहित) के रूप में निर्दिष्ट है? यदि नहीं, क्यों?

मुझे पता है is_nothrow_constructible को noexcept विनाशक की आवश्यकता है, लेकिन is_constructible अकेले नहीं है, और कंटेनर आवश्यकताओं को वैसे भी लक्षण टेम्पलेट्स टाइप करने के बजाय अवधारणाओं के संदर्भ में निर्दिष्ट किया गया है।

+0

कंटेनर विनाशक तत्व के विनाशक (ओं) से किसी भी अपवाद को पकड़ और अनदेखा कर सकता है। –

उत्तर

7

17.6.4.8/1 कुछ मामलों (प्रतिस्थापन काम करता है, हैंडलर काम करता है, मानक पुस्तकालय टेम्पलेट घटकों का दृष्टांत के लिए इस्तेमाल किया प्रकार पर परिचालन) में, सी ++ मानक पुस्तकालय एक सी ++ प्रोग्राम के द्वारा आपूर्ति घटकों पर निर्भर करता है। यदि ये घटक उनकी आवश्यकताओं को पूरा नहीं करते हैं, तो मानक कार्यान्वयन पर कोई आवश्यकता नहीं रखता है।

17.6.4.8/2 विशेष रूप से, प्रभाव निम्नलिखित मामलों में अपरिभाषित कर रहे हैं:

...

  • किसी भी प्रतिस्थापन समारोह या हैंडलर समारोह या नाशक आपरेशन एक अपवाद के माध्यम से बाहर निकल जाता है, तो , जब तक लागू होने पर विशेष रूप से आवश्यक व्यवहार: अनुच्छेद।
+0

एचएम ... मैंने अभी महसूस किया है: उपयोगकर्ता द्वारा आपूर्ति किए गए आवंटकों पर एक समान आवश्यकता होने की आवश्यकता है, है ना? क्या कोई अस्तित्व में है? –

+0

** 17.6.3.5 ** तालिका 28 में, 'आवंटन' के लिए एक प्रविष्टि कहती है "आवंटित" उचित अपवाद बढ़ा सकता है। "; 'deallocate' के लिए प्रविष्टि कहती है" अपवाद फेंक नहीं है। " क्या आप यही पूछ रहे हैं? –

+0

आह, ठीक है! हां, यह वही है जो मेरा मतलब था, धन्यवाद। किसी कारण से उस खंड में उस तालिका को देखने के लिए मेरे पास ऐसा नहीं हुआ। –

संबंधित मुद्दे