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 |