cs_anne-lise
Messages postés13Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention30 septembre 2005
-
30 sept. 2005 à 11:22
cs_anne-lise
Messages postés13Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention30 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.
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 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);