std::ios_base::ios_base
De es.cppreference.net
private:
ios_base( const ios_base& );
|
(1) | (hasta C++11) |
public:
ios_base( const ios_base& ) = delete;
|
(desde C++11) | |
protected:
ios_base();
|
(2) | |
1) El constructor de copia es privado(hasta C++11)eliminado(desde C++11): los flujos no se pueden copiar.
2) El constructor por defecto es protegido: solo las clases derivadas pueden construir
std::ios_base. El estado interno no está definido después de la construcción. La clase derivada debe llamar a std::basic_ios::init() para completar la inicialización antes del primer uso o antes del destructor; de lo contrario, el comportamiento no está definido.Notas
Lo mismo se aplica a los constructores de la siguiente clase en la jerarquía de E/S, std::basic_ios . Las clases derivadas posteriores ( std::istream y std::ostream ) siempre se construyen con un objeto concreto de búfer de flujo y llaman a std::basic_ios::init() , posiblemente más de una vez, para completar la inicialización de su base virtual.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 50 | C++98 | el constructor de copia no estaba especificado | especificado como privado |
| LWG 220 | C++98 |
el comportamiento al destruir un objeto
std::ios_base
antes de llamar a su init() no estaba claro |
el comportamiento es
indefinido en este caso |
| LWG 1249 | C++98 | la inicialización no necesitaba completarse antes del primer uso | también debe completarse |