Delete et destructeurs

cs_anne-lise Messages postés 13 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 septembre 2005 - 30 sept. 2005 à 11:22
cs_anne-lise Messages postés 13 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 septembre 2005 - 30 sept. 2005 à 15:08
Bonjour,


voila j'ai un probleme que je ne peux resoudre depuis un moment deja. J'ai une fonction de ce type :
float* function(float* input1, MaClasse input2)
sachant que input1 a ete construit par new float[N] et input2 par MaClasse(). A aucun moment dans le constructeur de MaClasse ni dans les traitements qui suivent on ne fait appel a input1. Ces deux arguments sont dissocies.


Voila mon probleme, lorsque au sein de cette fonction j'appelle delete[] input1, ca appelle le destructeur de input2, hors, je ne veux pas input2 soit detruit. J'ai fait des tests, si je n'appelle pas delete[] input1, le destructeur de MaClasse n'est pas appelle...


Or, dans cette fonction, je me traite les valeurs de input2 et de input1 mais a aucun moment je ne couple les pointeurs par exemple...


Est ce que quelqu'un sait quel pourrait etre le probleme ? Quelqu'un a une idee ?


J'ai bien pense a mettre le delete en dehors de la fonction mais j'utilise cette fonction au sein d'une boucle et je l'appelle par res=function(res, input2) donc j'ai besoin de desalloue la memoire de res avant de lui en realloue une autre.


Je ne joins pas le code car il est tres long.


Merci d'avance !


Anne-Lise

2 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
30 sept. 2005 à 15:04
salut,

que tu appelles ou non delete[] sur input1, ton objet input2 sera
détruit à la sortie de ta fonction. Quand tu passes une instance de
classe par valeur, une copie locale a la fonction est effectuée, et est
ensuite détruite quand ta fonction return.



Si tu veux eviter ca, tu dois passer input2 par reference.

Ex:

float* input1 = new float[10];

MaClasse input2;



function( input1, input2 );



avec function de prototype: float* function( float* input1, MaClasse& input2);

a+
0
cs_anne-lise Messages postés 13 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 septembre 2005
30 sept. 2005 à 15:08
Oui merci beaucoup ! J'allais justement ecrire que j'avais trouve le probleme !
:-)
Anne-Lise
0
Rejoignez-nous