std::ios_base:: ios_base
From cppreference.net
| (1) | ||
|
private
:
ios_base ( const ios_base & ) ; |
(до C++11) | |
|
public
:
ios_base ( const ios_base & ) = delete ; |
(начиная с C++11) | |
|
protected
:
ios_base ( ) ; |
(2) | |
1)
Конструктор копирования объявлен
private
(until C++11)
deleted
(since 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 | инициализация не обязательно должна быть завершена до первого использования | также должна быть завершена |