std::ios_base:: ios_base
From cppreference.net
| (1) | ||
|
private
:
ios_base ( const ios_base & ) ; |
(bis C++11) | |
|
public
:
ios_base ( const ios_base & ) = delete ; |
(seit C++11) | |
|
protected
:
ios_base ( ) ; |
(2) | |
1)
Der Kopierkonstruktor ist
private
(until C++11)
deleted
(since C++11)
: Streams sind nicht kopierbar.
2)
Der Standardkonstruktor ist geschützt: Nur abgeleitete Klassen dürfen
std::ios_base
konstruieren. 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 |