std::basic_iosएक सार्वजनिक निर्माता है :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, किसी क्लास के पास पब्लिक कंस्ट्रक्टर होने का एकमात्र कारण प्रोग्राम में उस क्लास के स्टैंडअलोन इंस्टेंस का उपयोग करना है। यदि एक वर्ग केवल अन्य वर्गों के पास होता है, तो उससे उतरता है (जैसा कि मामला लगता है basic_ios), सभी वर्ग के निर्माता होने चाहिए protected। के कंस्ट्रक्टर std::ios_baseसभी संरक्षित हैं। लेकिन, किसी कारण से, मानक के डिजाइनरों ने इसे basic_iosसार्वजनिक रूप से एक निर्माता बना दिया ।
basic_iosकई स्ट्रीम प्रकारों के लिए एक बेस क्लास के रूप में उपयोग किया जाता है, और मैं एक उपयोग के मामले की कल्पना नहीं कर सकता, जहां आपके पास कम से कम basic_istreamया एक नहीं था basic_ostream। वहाँ एक है?
basic_iosctor लेनेbasic_streambuf*से पहले आप कर सकते हैं सार्वजनिक किया गया हैusing B::B;। मुझे उम्मीद है कि पुराने कार्यान्वयन में सिर्फ एक प्रॉक्सी ctor था:A(int x) : B(x) {}- जो ठीक है भले हीBctor होprotected।