Clairement, les flux ne peuvent pas être copiés. Il devrait être possible de déplacer les ruisseaux. Selon 27.9.1.11 [ofstream.contre] le paragraphe 4, il est possible de se déplacer en construire une std::ofstream
. Par exemple:
#include <iostream>
#include <fstream>
std::ofstream makeStream(std::string const& name) {
return std::ofstream(name);
}
int main()
{
std::ofstream out{ makeStream("example.log") };
}
En essayant de déplacer un std::ostream
, par exemple, d'avoir une usine d'une fonction qui crée un std::ofstream
, une std::ostringstream
, ou certains autres flux selon une URNE passé un argument qui ne fonctionne pas. std::ostream
(ainsi, le modèle de classe std::basic_ostream
vraiment) a un protected
constructeur de déplacement selon 27.7.3.1 [ostream].
Pourquoi ne peut - std::ostream
être déplacé lui-même?