Namespaces
Variants

std::ios_base::ios_base

De fr.cppreference.net
 
 
 
 
private:
ios_base( const ios_base& );
(1) (jusqu'à C++11)
public:
ios_base( const ios_base& ) = delete;
(depuis C++11)
protected:
ios_base();
(2)
1) Le constructeur de copie est privé(jusqu'à C++11)supprimé(depuis C++11) : les flux ne sont pas copiables.
2) Le constructeur par défaut est protégé : seules les classes dérivées peuvent construire std::ios_base. L'état interne est indéfini après la construction. La classe dérivée doit appeler std::basic_ios::init() pour terminer l'initialisation avant la première utilisation ou avant le destructeur ; sinon le comportement est indéfini.

Notes

Il en va de même pour les constructeurs de la classe suivante dans la hiérarchie d'E/S, std::basic_ios . Les classes dérivées ultérieures ( std::istream et std::ostream ) sont toujours construites avec un objet tampon de flux concret et appellent std::basic_ios::init() , éventuellement plus d'une fois, pour compléter l'initialisation de leur base virtuelle.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 50 C++98 le constructeur de copie n'était pas spécifié spécifié comme privé
LWG 220 C++98 le comportement lors de la destruction d'un objet std::ios_base
avant l'appel à sa fonction init() n'était pas clair
le comportement est
indéfini dans ce cas
LWG 1249 C++98 l'initialisation ne devait pas nécessairement être terminée avant la première utilisation doit également être terminée