std::ios_base::ios_base
De cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev t-dcl-rev-num ">
</tbody><tbody>
</tbody>
| (1) | ||
private: ios_base( const ios_base& ); |
(hasta C++11) | |
public: ios_base( const ios_base& ) = delete; |
(desde C++11) | |
protected: ios_base(); |
(2) | |
1) El constructor de copia es
private (hasta C++11)eliminado (desde C++11): los flujos no se pueden copiar.2) El constructor por defecto es
protected: solo las clases derivadas pueden construir un objeto de tipo std::ios_base. El estado interno es indefinido 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 adicionales (std::istream y std::ostream) siempre se construyen con un objeto de búfer de flujo concreto 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 de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 50 | C++98 | El constructor de copia no se especificaba | Se especifica como private.
|
| LWG 220 | C++98 | El comportamientode destruir un objeto de tipo std::ios_baseantes de llamar a su función miembro init() no estaba claro. |
En este caso el comportamiento no está definido. |
| LWG 1249 | C++98 | No era necesario completar la inicialización antes del primer uso. | La inicialización también necesita completarse. |