std::basic_ioscó 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_basetấ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_istreamhoặc basic_ostream. Có một cái không?
basic_iosctor 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ả khiBctor làprotected.