CLASSE SSTRING OU LA MANIPULATION DES "STRING" PLUS INTUITIVE

plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005 - 11 déc. 2004 à 12:47
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 31 mai 2005 à 19:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28125-classe-sstring-ou-la-manipulation-des-string-plus-intuitive

plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
11 déc. 2004 à 12:47
Salut,

il manque le copy constructeur.
pour prendre la taille d'une chaine de caractere : strlen() de <cstring> (<string.h>), pour copier strcpy.
les operateurs +, +=, =, provoque des fuites memoires abominables ! Il faut faire un delete avant de réallouer !
et les typedef sstring, Sstring, ... c'est pas tres utile amha.
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
11 déc. 2004 à 13:28
taille de la chaîne = sString.Len();

pour les opérateurs +, +et, des fuites mémoires ? sur quoi faut il faire un delete ? peux tu expliquer comment les fuites de mémoire se produisent ?

tkx !

pour les typedef, c'est juste pour montrer leur utilisation.
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
11 déc. 2004 à 13:32
ha ok, pour le delete mais peux tu quand même expliquer comment les fuites de mémoire se produisent ?

tkx !
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
11 déc. 2004 à 14:31
il y a une fuite memoire quand tu ne libere pas les objets que tu alloues.
char* p = new char[50];
p = new char[30];
la, tu as perdu 50 octets, ils ne sont en effet plus référencé et il n'est plus possible de les liberer.

char* p = new char[50];
delete [] p;
p = new char[30];
la, c'est bon.

delete[] dans le destructeur aussi !

while(*b)
{
b++;
len_b++;
}
au lieu de faire ça, tu peux faire len_b = strlen(b);

tes typedef, ils polluent quand meme bien l'espace de nom global !
NoRabbit Messages postés 224 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 30 mars 2009
11 déc. 2004 à 16:13
ok, tkx !
les "delete" ont été ajoutés sauf pour le destructeur, une erreur se produit lorsqu'on concatène 2 chaînes (opérateurs + et +=)
Sans le delete dans le destructeur, aucune erreur ne se produit.
Rejoignez-nous