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 |