std::basic_ios
memiliki konstruktor publik :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, satu-satunya alasan bagi kelas untuk memiliki konstruktor publik adalah untuk menggunakan contoh mandiri dari kelas itu dalam suatu program. Jika suatu kelas ada hanya untuk memiliki kelas lain turun dari itu (seperti yang tampaknya terjadi basic_ios
), semua konstruktor kelas harus protected
. Konstruktor std::ios_base
semua dilindungi. Tetapi, untuk beberapa alasan, para perancang standar menjadikannya sebagai konstruktor basic_ios
publik.
basic_ios
digunakan sebagai kelas dasar untuk beberapa jenis aliran, dan saya tidak bisa membayangkan kasus penggunaan di mana Anda akan memiliki satu yang setidaknya basic_istream
atau tidak basic_ostream
. Apakah ada satu?
basic_ios
aktor yang mengambilbasic_streambuf*
telah publik sejak sebelum Anda bisa melakukannyausing B::B;
. Saya berharap bahwa implementasi lama hanya memiliki ctor proxy:A(int x) : B(x) {}
- yang berfungsi dengan baik bahkan jikaB
ctor adalahprotected
.