std::basic_ios
має публічний конструктор :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, єдиною причиною для класу мати загальнодоступний конструктор - використовувати окремий екземпляр цього класу в програмі. Якщо клас існує лише для того, щоб з нього сходили інші класи (як це здається basic_ios
), всі конструктори класу повинні бути protected
. Усі конструктори std::ios_base
захищені. Але чомусь дизайнери стандарту зробили цей конструктор basic_ios
загальнодоступним.
basic_ios
використовується як базовий клас для декількох типів потоків, і я не можу передбачити випадок використання, коли у вас був би той, який не був принаймні a basic_istream
або basic_ostream
. Чи є такий?
basic_ios
ctor, який приймає abasic_streambuf*
, був публічним з тих пір, як ви могли це зробитиusing B::B;
. Я думаю, що у старих реалізаціях просто був проксі-сервер:A(int x) : B(x) {}
- який працює добре, навіть якщоB
є ctorprotected
.