Namespaces
Variants

std::ios_base:: ios_base

From cppreference.net
(1)
private :
ios_base ( const ios_base & ) ;
(jusqu'à C++11)
public :
ios_base ( const ios_base & ) = delete ;
(depuis C++11)
protected :
ios_base ( ) ;
(2)
1) Le constructeur de copie est private (until C++11) deleted (since C++11) : les streams 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 compléter 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