std::basic_ios
ma publicznego konstruktora :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, jedynym powodem, dla którego klasa ma konstruktora publicznego, jest użycie autonomicznej instancji tej klasy w programie. Jeśli klasa istnieje tylko po to, aby inne klasy z niej wywodziły się (jak się wydaje basic_ios
), wszystkie konstruktory klasy powinny być protected
. Wszystkie konstruktory std::ios_base
są chronione. Ale z jakiegoś powodu projektanci standardu basic_ios
upublicznili tego konstruktora .
basic_ios
jest używany jako klasa podstawowa dla kilku typów strumieni i nie mogę przewidzieć przypadku użycia, w którym miałbyś taki, który nie byłby przynajmniej a basic_istream
lub basic_ostream
. Czy jest jeden
basic_ios
afaik, biorąc pod uwagę , że ctor biorącybasic_streambuf*
był publicznie, zanim było to możliweusing B::B;
. Oczekuję, że stare implementacje miały po prostu proxy ctor:A(int x) : B(x) {}
- który działa dobrze, nawet jeśliB
ctor jestprotected
.