Maison >développement back-end >C++ >Pourquoi ne puis-je pas copier un objet `stringstream` en C ?

Pourquoi ne puis-je pas copier un objet `stringstream` en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 02:40:11724parcourir

Why Can't I Copy a `stringstream` Object in C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn