Следующий код взят из Руководство пользователя стандартной библиотеки Apache C ++
class DerivedOutputStream : public std::ostream {
public:
DerivedOutputStream():
std::ios(0), std::ostream(&dsb) {} //1
// ...
private:
DerivedStreamBuf dsb;
// ...
};
Обратите внимание, что std::ios
не непосредственный базовый класс DerivedOutputStream
, но он появляется в списке инициализации члена.
Я думаю, что это не правильно, не так ли?
Это правильно, если это виртуальный базовый класс. Виртуальные базы инициализируются из самого производного класса.
Других решений пока нет …