std::ios_base::ios_base
От ru.cppreference.net
private:
ios_base( const ios_base& );
|
(1) | (до C++11) |
public:
ios_base( const ios_base& ) = delete;
|
(начиная с C++11) | |
protected:
ios_base();
|
(2) | |
1) Конструктор копирования является закрытым(до C++11)удалённым(начиная с C++11): потоки не копируются.
2) Конструктор по умолчанию защищён: только производные классы могут создавать
std::ios_base. Внутреннее состояние не определено после конструирования. Производный класс должен вызвать std::basic_ios::init() для завершения инициализации перед первым использованием или перед деструктором; в противном случае поведение не определено.Примечания
То же самое относится к конструкторам следующего класса в иерархии I/O, std::basic_ios . Дальнейшие производные классы ( std::istream и std::ostream ) всегда конструируются с конкретным объектом stream buffer и вызывают std::basic_ios::init() , возможно, более одного раза, для завершения инициализации их виртуального базового класса.
Отчёты о дефектах
Следующие отчеты об изменениях в поведении, содержащие исправления дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 50 | C++98 | конструктор копирования не был указан | указан как приватный |
| LWG 220 | C++98 |
поведение при уничтожении объекта
std::ios_base
до вызова его init() было неясным |
поведение в этом случае
не определено |
| LWG 1249 | C++98 | инициализация не обязательно должна быть завершена до первого использования | также должна быть завершена |