std::basic_ios
hat 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_base
sind alle geschützt. Aber aus irgendeinem Grund haben die Designer des Standards diesen einen Konstruktor der basic_ios
Öffentlichkeit gemacht.
basic_ios
wird 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_istream
oder war basic_ostream
. Ist dort eines?
basic_ios
ctor, 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 einenB
Ctor handeltprotected
.