std::basic_istream<CharT,Traits>:: basic_istream
|
explicit
basic_istream
(
std::
basic_streambuf
<
CharT, Traits
>
*
sb
)
;
|
(1) | |
|
protected
:
basic_istream ( const basic_istream & rhs ) = delete ; |
(2) | (seit C++11) |
|
protected
:
basic_istream ( basic_istream && rhs ) ; |
(3) | (seit C++11) |
1) Konstruiert das
basic_istream
-Objekt, weist den Basisklassen initiale Werte zu durch Aufruf von
basic_ios
::
init
(
sb
)
. Der Wert von
gcount()
wird mit Null initialisiert.
2) Der Kopierkonstruktor ist geschützt und als gelöscht markiert. Eingabeströme sind nicht kopierbar.
3) Der Move-Konstruktor kopiert den Wert von
gcount()
aus
rhs
, setzt den gcount()-Wert von
rhs
auf null und verwendet
basic_ios
<
CharT, Traits
>
::
move
(
rhs
)
, um alle basic_ios-Member außer
rdbuf()
aus
rhs
in
*
this
zu verschieben. Dieser Move-Konstruktor ist geschützt: Er wird von den Move-Konstruktoren der beweglichen Eingabestromklassen
std::basic_ifstream
und
std::basic_istringstream
aufgerufen, die wissen, wie der zugehörige Streampuffer korrekt verschoben wird.
Parameter
| sb | - | Streambuffer, der als zugrunde liegendes Gerät verwendet wird |
Beispiel
#include <iostream> #include <sstream> int main() { std::istringstream s1("hello"); std::istream s2(s1.rdbuf()); // OK: s2 teilt sich den Puffer mit s1 // std::istream s3(std::istringstream("test")); // FEHLER: Move-Konstruktor ist geschützt // std::istream s4(s2); // FEHLER: Kopierkonstruktor ist gelöscht std::istringstream s5(std::istringstream("world")); // OK: Move-Konstruktor wird aufgerufen // durch abgeleitete Klasse std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n'; }
Ausgabe:
hello world