std::ios_base::ios_base
Von de.cppreference.net
private:
ios_base( const ios_base& );
|
(1) | (bis C++11) |
public:
ios_base( const ios_base& ) = delete;
|
(seit C++11) | |
protected:
ios_base();
|
(2) | |
1) Der Kopierkonstruktor ist privat(bis C++11)gelöscht(seit C++11): Streams sind nicht kopierbar.
2) Der Standardkonstruktor ist geschützt: Nur abgeleitete Klassen können
std::ios_base. Der interne Zustand ist nach der Konstruktion undefiniert. Die abgeleitete Klasse muss std::basic_ios::init() aufrufen, um die Initialisierung vor der ersten Verwendung oder vor dem Destruktor abzuschließen; andernfalls ist das Verhalten undefiniert.Hinweise
Gleiches gilt für die Konstruktoren der nächsten Klasse in der I/O-Hierarchie, std::basic_ios . Weiter abgeleitete Klassen ( std::istream und std::ostream ) werden stets mit einem konkreten Streampuffer-Objekt konstruiert und rufen std::basic_ios::init() , möglicherweise mehrfach, auf, um die Initialisierung ihrer virtuellen Basis abzuschließen.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 50 | C++98 | der Kopierkonstruktor war nicht spezifiziert | als privat spezifiziert |
| LWG 220 | C++98 |
das Verhalten beim Zerstören eines
std::ios_base
Objekts vor dem Aufruf von init() war nicht klar |
das Verhalten ist
in diesem Fall undefiniert |
| LWG 1249 | C++98 | Initialisierung musste nicht vor der ersten Verwendung abgeschlossen sein | muss ebenfalls abgeschlossen sein |