Bonjour à tous ,
Comme l'indique le titre du sujet mon problème se situe au niveau d'un std::vector contenant des classes template. Tout d'abord cette classe template contient des pointeurs que le constructeur de copie est sensé recopier (c'est prévu) mais cela pose un problème que j'ai déjà rencontré et que j'avais déjà détourné même si c'est ici impossible à savoir qu'on ne peut pas mettre le mot const dans le constructeur de copie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Particule(const Particule<T> &copy)
...
//coince ici :
if(copy.getTrajectoryX()!=NULL)
     m_trajectoryX = new ObjectTime<T,double>(copy.getTrajectoryX()); 
if(copy.getTrajectoryY()!=NULL)
     m_trajectoryY = new ObjectTime<T,double>(copy.getTrajectoryY());
if(copy.getTrajectoryZ()!=NULL)
     m_trajectoryZ = new ObjectTime<T,double>(copy.getTrajectoryZ());
if(copy.getSizeVariation()!=NULL)
     m_sizeVariation = new ObjectTime<T,double>(copy.getSizeVariation());
Avec getTrajectoryX(), getTrajectoryY(), getTrajectoryZ() et getSizeVariation(), des pointeurs sur des objets contenus dans la classe à recopier : on ne peut pas indiquer le mot clé const car du coup le compilateur ne sait pas qu'on ne modifie pas la classe lorsqu'on appelle getTrajectory... car ces accesseurs ne peuvent pas être const vu qu'ils retournent un pointeur.
C'est pourquoi je bloque déjà ici : est-il possible de déclarer un acceseur const retournant un pointeur ? Sinon comment faire quelque chose équivalent ?
De plus, j'ai un vector de particule : std::vector<Particule<T> > que je redimensionne lors de la construction de la classe qui le possède :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
m_particules.resize(numberParticuleTotal,Particule<T>([... arguments de construction de la particule ...]));
Mais ce code ne fait qu'instancier le premier objet de cette façon, d'après un std::cout placé dans le constructeur approprié qui n'est appelé qu'une fois meme si le tableau est redimensionné de 10 ou de n'importe quelle valeur. J'ai l'impression que tous les autres objets sont construits par copie du premier, c'est pourquoi j'ai besoin d'un constructeur de copie fonctionnel, c'est pourquoi je fait appel à votre aide , car mon constructeur de copie n'accepte pas un objet constant et est donc rejeté à la compilation.
J'ajouterais également que lorsque je ne fais pas de constructeur de copie, les pointeurs semblent être copiés et les conséquences sont que toutes les particules sont situées au même endroit puisque les pointeurs pointent sur des classes trajectoires qui définissent la trajectoire des particules.

Voila, j'espère que vous m'aurez plus ou moins bien compris, n'hésitez pas si vous souhaité d'autres explications ou quelques bouts de code

Merci par avance