| |||||
| Bas de page | |
|---|---|
| Auteur | Sujet : stringstream |
Publicité | Posté le 09-03-2009 à 14:18:52 ![]() ![]() |
Un Programmeur | Les exceptions doivent etre copiables, les IOStreams ne le sont pas. Si tu definis toi meme ton constructeur de copie et ton operateur d'assignation, tu devrais etre capable de t'en sortir. |
Taz bisounours-codeur | Par ce que stringstream n'a pas de constructeur de recopie, ni de = |
weblook$$ | et le fait de passer par un pointeur marche c'est étonnant ! le fait de wrapper le IOstream dans un auto_ptr rend la classe copiable donc Message édité par weblook$$ le 09-03-2009 à 15:02:37 |
Un Programmeur | Essaie de mettre un delete ss_ dans ton destructeur et on va voir combien de temps ca va marcher. Au pire, c'est Murphy qui va decider. |
weblook$$ | oui mais c'est un auto_ptr, on a pas besoin de faire delete... |
Un Programmeur | Ah oui... Et tu l'as mis mutable... Parce qu'un auto_ptr non mutable, ca ne se copie pas. Un auto_ptr est copie avec une semantique de deplacement et l'original est modifie, ce qui fait que ca marche. Si tu veux bien une semantique de deplacement. |
weblook$$ |
le mutable c'est juste lié à la fonction what, c'est pas une histoire de copie, je suis désolé mais ta réponse n'était pas du tout clair Message édité par weblook$$ le 09-03-2009 à 17:57:16 |
weblook$$ | et puis quand j'essaye de déclarer un operator = et un constructeur de recopie dans ma classe Exception, le compilateur me sort: std::basic_streambuf<_Elem,_Traits>::operator =' : impossible d'accéder à private membre déclaré(e) dans la classe 'std::basic_streambuf<_Elem,_Traits>' ça me parait totalement illogique dans la mesure où le compilateur m'indique qu'une fonction d'une classe ne peut pas accéder à ses membres privés... mais où va le monde Message édité par weblook$$ le 09-03-2009 à 16:16:59 |
Taz bisounours-codeur | Il te faut un constructeur par recopie pour pouvoir transmettre/copier l'exception que tu lances dans les contextes supérieurs. |
Publicité | Posté le 09-03-2009 à 18:06:01 ![]() ![]() |
weblook$$ | contexte supérieur c'est à dire les classes mères ? j'aimerais vraiment comprendre.. Merci Message édité par weblook$$ le 09-03-2009 à 18:30:33 |
Un Programmeur | Les appelants de la fonction qui lance l'exception.
|
weblook$$ | oui là clairement ce que je ne maitrises pas ce sont ces deux points :
|
Taz bisounours-codeur |
|
weblook$$ |
|
weblook$$ | En faite ce que je viens de réaliser/comprendre c'est que :
f(B) appel le constructeur de copie de A, mais si on définit un constructeur de recopie dans B ça n'est plus le cas à moins d'appeler explicitement le constructeur par recopie de A j'imagine.... Donc finalement le code la classe StreamingException ne tente pas d'appeler le constructeur par recopie de stringstream mais uniquement celui de auto_ptr définit ainsi dans <memory>
et en modifiant what, pour que cette fonction se contente de retourner s_, ça marche aussi ! et de plus les mutable ne servent plus à rien, mais peut être que ce code est un peu crado, car il y a une copie incomplète qui est fournit au contexte supérieur... (l'objet stringstream est en effet non initilialisé) Message édité par weblook$$ le 09-03-2009 à 20:06:44 |
| Sujets relatifs | |
|---|---|
| [C++] Problème stringstream/fstream et rdbuf() [résolu] | [Resolu]erreur de base avec une stringstream |
| Flux : stringstream, à quoi sert le flush() | [C++] Pb avec stringstream |
| Plus de sujets relatifs à : stringstream | |






