std::basic_ioshat einen öffentlichen Konstruktor :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, der einzige Grund für eine Klasse, einen öffentlichen Konstruktor zu haben, ist die Verwendung einer eigenständigen Instanz dieser Klasse in einem Programm. Wenn eine Klasse nur existiert, um andere Klassen davon abzuleiten (wie es der Fall zu sein scheint basic_ios), sollten alle Konstruktoren der Klasse vorhanden sein protected. Die Konstruktoren von std::ios_basesind alle geschützt. Aber aus irgendeinem Grund haben die Designer des Standards diesen einen Konstruktor der basic_iosÖffentlichkeit gemacht.
basic_ioswird als Basisklasse für mehrere Stream-Typen verwendet, und ich kann mir keinen Anwendungsfall vorstellen, in dem Sie einen haben würden, der nicht mindestens ein basic_istreamoder war basic_ostream. Ist dort eines?
basic_iosctor, der a nimmt,basic_streambuf*ist seit jeher öffentlichusing B::B;. Ich gehe davon aus, dass alte Implementierungen nur einen Proxy-Ctor hatten:A(int x) : B(x) {}- was auch dann gut funktioniert, wenn es sich um einenBCtor handeltprotected.