2010-08-02 7 views
0

Lorsque j'utilise l'opérateur < < pour mettre des valeurs dans le tampon, l'adresse du tampon change parfois. Copie-t-il les valeurs à une nouvelle adresse ou les déplace-t-il vers une nouvelle adresse en mémoire et comment puis-je connaître l'adresse où les données sont stockées?Comment l'adresse du tampon stringstream change

De plus, je serais intéressé par un livre qui traite des flux en C++.

Répondre

2

Si vous mettez plus de données dans un tampon, alors il peut contenir, la classe de flux réallouera automatiquement un tampon plus grand et déplacer toutes les données actuelles dans le nouveau.

Le point entier de la classe iostreams est que vous n'êtes pas censé vous soucier de ces détails. Pour un livre sur juste IOStream: Essayez Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference par Angelika Langer (que j'ai rencontré et confiance) (L'avant est par Jerry Schwartz, qui a écrit la première mise en œuvre d'iostreams.Il a écrit un livre sur le sujet aussi , mais il semble être épuisé)

+0

Eh bien, vous le faites si vous avez enregistré l'adresse tampon pour autre chose avant d'ajouter du texte. EG: 'ptr = s; s << "additionalnaltext"; // ptr pourrait se tromper maintenant' – Gui13

1

En ce qui concerne les livres, tout dépend du niveau de détail souhaité. La bibliothèque standard C++ (Nicolai Josuttis) fait un bon travail en ce qui concerne l'utilisation de iostreams.

Si vous voulez savoir sur les détails de mise en œuvre (par exemple, vous êtes pour mettre en œuvre vos propres iostreams), standard C++ iostreams et locales (et Langer Kreft) est l'ouvrage de référence sur le sujet.

1

C'est dans la classe de gotchas tels que

std::vector<int> v; 
v.push_back(1); 
v.push_back(v.back()); 

ou

std::string s("x"); 
s.append(s.c_str()); 

muter et en se référant à une adresse dans un conteneur STL peut provoquer des erreurs de mémoire que le conteneur traite l'emplacement de mémoire une ressource privée mais malheureusement au nom de la performance l'abstraction n'est pas étanche. J'ai été mordu par le problème du repoussage de vecteur et il m'a fallu des années pour comprendre.