Pourquoi la copie de Stringstream est interdite
La copie d'objets stringstream n'est pas autorisée en C en raison de la privatisation de leurs constructeurs de copie. Cela s'applique à tous les types de flux, y compris stringstream, istream, ostream et iostream.
Les flux ne sont pas de simples conteneurs qui peuvent être dupliqués. Ils servent de conduits par lesquels les données circulent, reliant une source à un récepteur. Contrairement aux conteneurs, les flux ne contiennent pas de données mais facilitent plutôt leur transmission.
Considérez l'analogie d'un flux avec un canal qui transporte des données. Créer une copie d'un flux reviendrait à créer un canal supplémentaire connecté à la même source de données. Cependant, puisque les données ont déjà été consommées par le flux d'origine, aucune nouvelle donnée ne doit être reçue par la copie.
Pour illustrer :
int main() { std::stringstream s1("This is my string."); std::stringstream s2 = s1; // error, copying not allowed }
Dans cet exemple, tenter de copier s1 dans s2 entraîne une erreur car cela créerait une connexion en double avec une source de données déjà épuisée.
Bien que la copie de flux soit interdite, la création de références leur est toujours permis. Cela permet à plusieurs entités de code d'accéder à la même source de données sous-jacente sans avoir besoin de duplication.
std::istream copy_cin = std::cin; //error std::istream & ref_cin = std::cin; //ok
De plus, il est possible de créer un nouvel objet flux qui utilise le même tampon sous-jacent qu'un flux existant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!