- Pour l'opérateur +, c'est l'objet courant qui doit être modifié, tu ne dois pas retourner un nouvel objet comme tu le fais.
- Toujours dans cette méthode, tu retournes un objet 'string' alors que tu n'as pas de constructeur de copie.
- Dans ton destructeur tu ne testes pas si le pointeur 'a' pointe sur une chaine ou sur NULL.
- Idem dans l'opérateur d'affectation: tu détruis 'a' alors qu'il pointe peut-être sur NULL.
Kaid -
kaid.fr.st-------------------------------
Réponse au message :
-------------------------------
> Salut, j'ai un problème dans le code suivant au niveau de l'allocation mémoire de tmp.a = new char... dans operator+, et je ne sait pas du tout pourquoi donc si qqn peut m'aider ce serais un grand plaisir (je me lance en c++ et je fait ça pour aprendre).
>
> #include <stdiostr.h>
> #include <string.h>
>
> class string
> {
> char* a;
>
> public:
> string(char* chaine = NULL)
> {
> if (chaine)
> {
> a = new char [strlen(chaine)+1];
> strcpy(a,chaine);
> }
> else a = NULL;
> }
> ~string()
> {
> delete [] a;
> }
> char* operator() ()
> {
> return a;
> }
> string &operator= (const string &p)
> {
> delete [] a;
> if (p.a != NULL)
> {
> a = new char [strlen(p.a)+1];
> strcpy(a,p.a);
> }
> else a = p.a;
>
> return (*this);
> }
> string operator+ (const string &p)
> {
> string tmp;
> int size = strlen(a) + strlen(p.a) + 1;
> tmp.a = new char [size];
> sprintf(tmp.a,"%s%s",a,p.a);
> return tmp;
> }
> };
>
> int main()
> {
> string a("kikoo"),b,c("bubu");
> b = a + c;
> cout << b() << '\n';
> return 0;
> }
>
> Bub325
> Le codeur pas comme tout le monde
>
