Etendre std::string(char *) pour utiliser nos references de char[] a l'interne

ebeaumier Messages postés 2 Date d'inscription mercredi 6 septembre 2006 Statut Membre Dernière intervention 2 mars 2009 - 2 mars 2009 à 12:22
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 2 mars 2009 à 23:14
Bonjour,

Je dois appeler une API externe qui ne prend que des "const string &" et nous utilisons a l'interne des char[].

Est-il possible d'étendre la classe "string" pour surcharger le constructor  std::string(char*) afin d'utiliser nos char[] a l'interne de ceux-ci?   Car par défaut, le constructor de std::string(char*) creer une copie a chaque fois et comme on dois appeler cet API a profusion ... utilisant d'énorme chaine de caracteres (XML), cela fait beaucoup d'allocation/deallocation ainsi que de copies en memoire inutile.

Merci.

3 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
2 mars 2009 à 13:55
tu peux créer effectivement une classe dérivée de string et ajouter un contructeur depuis const char* qui ne copiera pas la chaîne mais seulement l'adresse et remplira les autres champs de la classe.
Le mieux serait tout de même d'essayer de travailler avec un seul type de chaînes mais bon...
0
ebeaumier Messages postés 2 Date d'inscription mercredi 6 septembre 2006 Statut Membre Dernière intervention 2 mars 2009
2 mars 2009 à 14:27
Merci pour la réponse.  Effectivement j'avais envisagé de surcharger ce dernier, mais je ne trouve pas le source de std::string().  Tu sais ou je peux le trouver?  Car pour faire pointer le char * interne de "string" j'aurais besoin de ces infos ... a tout le moins le .h pour les declarations internes de string.h.

Merci.
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
2 mars 2009 à 23:14
ben ces fichiers sont standards donc tu les as forcément; c'est effectivement string.h, xstring.h etc...
0
Rejoignez-nous