Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1914 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Destruction non voulue

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Destruction non voulue

n°689803
captainneu​neu
Posté le 01-04-2004 à 15:05:57  profilanswer
 

salut, je me mets au C++ et la, je suis confronté à un probleme avec les destructeurs.
cette fonction :

Code :
  1. //Fonction de concaténation avec String
  2. String String::plus(const String & s)
  3. {
  4. char temp[N];
  5. strncpy(temp,chaine,N);  //temp=chaine
  6. strcat(temp,s.chaine); //Concaténation dont le résultat
  7.                        //est déposé dans temp.
  8. String z(temp);
  9. return z;//ici je retourne z mais le destructeur le détruit
  10. }


 
pourquoi z est détruit et le retour foire ??
la fonction fonctionne parfaitement si on ne code pas les destructeurs.
merci de votre aide
++

mood
Publicité
Posté le 01-04-2004 à 15:05:57  profilanswer
 

n°689807
chrisbk
-
Posté le 01-04-2004 à 15:08:28  profilanswer
 

j'ai peur.
fais voir ton constructeur (const char *) et ton destructeur ?
(roh pis meme, c'est cradeux ton truc)

n°689812
captainneu​neu
Posté le 01-04-2004 à 15:11:09  profilanswer
 

chrisbk a écrit :

j'ai peur.
fais voir ton constructeur (const char *) et ton destructeur ?
(roh pis meme, c'est cradeux ton truc)
 


 
Alors, le constructeur :

Code :
  1. String::String(const char *s)
  2. {
  3. chaine=new char[N];
  4. if(strlen(s)>N)
  5.  cout<<"Chaine trop longue !\a"<<endl;
  6. strncpy(chaine,s,N);
  7. }


 
Le destructeur :

Code :
  1. String::~String()
  2. {
  3. delete [] chaine;
  4. cout<<"Destruction d'une String"<<endl;
  5. }

n°689818
chrisbk
-
Posté le 01-04-2004 à 15:13:24  profilanswer
 

mais c'est quoi ce N stupide ? tu veux pas le virer ?
T'as fait un constructeur de recopie ? (String::String(const String & ))

n°689824
captainneu​neu
Posté le 01-04-2004 à 15:17:48  profilanswer
 

chrisbk a écrit :

mais c'est quoi ce N stupide ? tu veux pas le virer ?
T'as fait un constructeur de recopie ? (String::String(const String & ))


 
oauis, ya un constructeur par recopie
pour le N, on peut le jareter oui, je pense pas que ca soit la cause du probleme

Code :
  1. String::String(const String & a)
  2. {
  3. chaine=new char[N];
  4. strncpy(chaine,a.chaine,N);
  5. cout<<"Creation d'une String"<<endl;
  6. }

n°689826
chrisbk
-
Posté le 01-04-2004 à 15:19:03  profilanswer
 

c'est normal que Z soit detruit, vu que c'est un objet local. Cela dit il y aura creation d'un nouvel objet par le truchement de ton constructeur de recopie.
 
t'entends quoi par retour qui foire ?

n°689833
Taz
bisounours-codeur
Posté le 01-04-2004 à 15:22:41  profilanswer
 

en voilà une implémentation de string qui est un anti-modèle [:dawa]

n°689839
captainneu​neu
Posté le 01-04-2004 à 15:25:38  profilanswer
 

chrisbk a écrit :

c'est normal que Z soit detruit, vu que c'est un objet local. Cela dit il y aura creation d'un nouvel objet par le truchement de ton constructeur de recopie.
 
t'entends quoi par retour qui foire ?


 
en fait, le probleme, c'est que je n'utilisais pas le constructeur par recopie...
je faisais ca :
 

Code :
  1. String s1("azerty" ),s2('q'),s3;
  2. s3=s1.plus(s2);


 
je pense qu'en faisant  

Code :
  1. s3(s1.plus(s2))


ca devrait fonctionner...
 
c'est vraiment mon tout premier code en C++ donc fo etre indulgent..
 
j'ai deja peur d'une future intervention de Taz (koike je c pas si il intervient aussi en C++ :??: )

n°689841
captainneu​neu
Posté le 01-04-2004 à 15:26:11  profilanswer
 

Taz a écrit :

en voilà une implémentation de string qui est un anti-modèle [:dawa]


 
lol, kes ke je disais !!
 
tu peux m'expliquer ce que tu veux dire par la stp et quelle aurait été une solution plus correcte ?

n°689845
Taz
bisounours-codeur
Posté le 01-04-2004 à 15:29:31  profilanswer
 

1) pas de gestion d'erreur (magique ton constructeur d'ailleurs)
2) chaine à taille fixe ...
3) tu traines les boulets de c-string à savoir l'\0 final
4) t'as pas de surcharge d'opérateur
5) etc
 
je sais que c'est à but didactique, mais bien faire ça c'est déjà très compliqué, ça demande de la réflexion

mood
Publicité
Posté le 01-04-2004 à 15:29:31  profilanswer
 

n°689851
captainneu​neu
Posté le 01-04-2004 à 15:35:49  profilanswer
 

Taz a écrit :

1) pas de gestion d'erreur (magique ton constructeur d'ailleurs)
2) chaine à taille fixe ...
3) tu traines les boulets de c-string à savoir l'\0 final
4) t'as pas de surcharge d'opérateur
5) etc
 
je sais que c'est à but didactique, mais bien faire ça c'est déjà très compliqué, ça demande de la réflexion


 
je vais essayer d'ameliorer tout ca.
je decouvre la POO et le C++, ya vraiment beaucoup de fonctionnalités...
c'est mon premier TP ca en fait et je suis allé un peu plus loin puisque l'enoncé ne demandait que une allocation statique.
mais comme je compte coder mes prochians projets en C++, j'essaie d'acquerir de bon automatismes des le debut


Message édité par captainneuneu le 01-04-2004 à 15:36:00
n°689853
Taz
bisounours-codeur
Posté le 01-04-2004 à 15:37:39  profilanswer
 

ben là c'est bof ...
 
si tu commencais par faire une pauvre classe qui contient juste
 
int *p = new int;
 
et qui gère ça à peu près correctement, ça serait déjà énorme

n°689859
captainneu​neu
Posté le 01-04-2004 à 15:42:06  profilanswer
 

Taz a écrit :

ben là c'est bof ...
 
si tu commencais par faire une pauvre classe qui contient juste
 
int *p = new int;
 
et qui gère ça à peu près correctement, ça serait déjà énorme


 
mon projet en cours c du cryptage RSA
je comptait créer une classe qui gere les nombres infinis, mais je pense que ca sera trop galere vu mon niveau..
je pense deja faire une classe complete et bien propre pour gerer des __int64
 
mais si t'as des suggestions..

n°689860
captainneu​neu
Posté le 01-04-2004 à 15:42:38  profilanswer
 

ou alors, je code le projet en C, mais je veux vraiment me mettre a la POO

n°689864
Taz
bisounours-codeur
Posté le 01-04-2004 à 15:45:20  profilanswer
 

vois le désastre ... je te propose de faire le petit exercice que je t'ai dit, juste pour te tester


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Destruction non voulue

 

Sujets relatifs
[java] [applet] formulaire via une applet, destruction... [res+source]Session : Destruction et recréation
[JAVA] obtenir la précision voulue pour un nombre....[PHP] - Destruction de session
[SQL&PHP] - Selectionner les mots commencant par une lettre voulue 
Plus de sujets relatifs à : [C++] Destruction non voulue


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)