std::basic_ios
có một nhà xây dựng công cộng :
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
IMO, lý do duy nhất để một lớp có một hàm tạo công khai là sử dụng một thể hiện độc lập của lớp đó trong một chương trình. Nếu một lớp chỉ tồn tại để có các lớp khác xuất phát từ nó (dường như là trường hợp basic_ios
), thì tất cả các hàm tạo của lớp sẽ là protected
. Các nhà xây dựng của std::ios_base
tất cả được bảo vệ. Nhưng, vì một số lý do, các nhà thiết kế của tiêu chuẩn đã tạo ra một công trình xây dựng này basic_ios
.
basic_ios
được sử dụng làm lớp cơ sở cho một số loại luồng và tôi không thể hình dung được trường hợp sử dụng mà bạn có ít nhất một basic_istream
hoặc basic_ostream
. Có một cái không?
basic_ios
ctor lấy mộtbasic_streambuf*
đã được công khai kể từ trước khi bạn có thể làmusing B::B;
. Tôi hy vọng rằng các triển khai cũ chỉ có một ctor proxy:A(int x) : B(x) {}
- hoạt động tốt ngay cả khiB
ctor làprotected
.