2016-01-26 9 views
28

this व्याख्यान में, स्पीकर का उल्लेख है (शुरुआत में) कि मानक पुस्तकालय में कोई शुद्ध आभासी कार्य नहीं है (या वह किसी के बारे में नहीं जानता है)। मेरा मानना ​​है कि एलेक्स स्टेपानोव इस भाषा की सुविधा के खिलाफ थे लेकिन प्रारंभिक एसटीएल डिज़ाइन के बाद से, मानक लाइब्रेरी में कोई शुद्ध वर्चुअल रेंग गया है?क्या सी ++ मानक पुस्तकालय में शुद्ध वर्चुअल फ़ंक्शन है?

एफडब्ल्यूआईडब्ल्यू (और अगर मैं गलत हूं तो मुझे सही करें) अद्वितीय पॉइंटर्स में डिलीटर अंततः अधिकांश कार्यान्वयन में वर्चुअल प्रेषण का उपयोग करते हैं लेकिन ये शुद्ध आभासी नहीं हैं।

+0

क्या आपका मतलब संपूर्ण मानक लाइब्रेरी या केवल 'एसटीएल' (इटरेटर, एल्गोरिदम और कंटेनर) भाग है? – Galik

+0

मुझे मानक पुस्तकालय में किसी भी शुद्ध आभासी कार्यों के बारे में पता नहीं है। 'Unique_ptr' के लिए डिफ़ॉल्ट डिलीटर बहुत गैर-वर्चुअल हैं, इसलिए यदि आप गैर-पॉलीमोर्फिक बेस क्लास तक पहुंच जाते हैं तो असुरक्षित। दूसरी ओर 'shared_ptr', मूल सूचक के साथ एक टाइप-मिस्ड डिलीटर फ़ंक्शन रखता है, इसलिए इस तरह से सुरक्षित है। –

+0

शुद्ध वर्चुअल फ़ंक्शन वाला कोई भी वर्ग तत्काल नहीं होगा। मैं किसी भी मानक वर्ग से अनजान हूं जिसका उपयोग केवल बेस क्लास के रूप में किया जाना है और सीधे खुद को उपयोग करने योग्य नहीं है। –

उत्तर

51

[syserr.errcat.overview] है std::error_category

class error_category { 
    virtual const char* name() const noexcept = 0; 
    virtual string message(int ev) const = 0; 
}; 

सी ++ 14 में कोई दूसरों रहे हैं।

+0

आप कैसे सुनिश्चित हैं कि कोई अन्य नहीं है? बस उत्सुक। (पीएस +1) – Nemo

+16

@ नीमो ने '= 0' के लिए अध्याय 17 से आगे, मानक के पाठ की खोज की। हर हिट पर नजर डाली (वहां कई नहीं हैं)। वास्तविक काम करने पर विलंब करने का अच्छा कारण। –

+2

ध्यान दें कि 'std :: function' का एक सामान्य कार्यान्वयन शुद्ध वर्चुअल फ़ंक्शंस को कार्यान्वयन विवरण के रूप में उपयोग करेगा (या, सी-शैली ओओ के बराबर पुन: पेश करेगा)। यह भविष्य और अन्य रन टाइम अवधारणा/प्रकार मिटाए गए प्रकारों के बारे में भी सच हो सकता है। – Yakk

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