Bonjour,
J'ai une classe qui contient un tableau de Point (une autre classe définie par ailleurs) et j'ai "testé" les trois écritures suivantes. Chacune donne des résultats et des problèmes différents et du coup, je ne sais pas quoi faire de mieux.
Cas 1 ("tableau statique")
------
Cela semble OK, mais est-ce la bonne façon de faire en C++?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Class A: { Point tP[nbrPoints]; A(); addPoint(int i, Point *P); } A::A() { } A::addPoint(int i, Point *P) { (tP+i)->x=P->x; (tP+i)->y=P->y; (tP+i)->z=P->z; }
Cas 2 ("tableau dynamique")
------
Ceci me semble une version améliorée du cas 1, où j'utilise la directive new. Or, j'appelle souvent la classe A et dans ce cas, je constate une chute des performances assez dramatique et une augmentation incroyable de la mémoire (genre de 10 à 300 !). Pas très surprenant vu l'appel du new dans le constructeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Class A: { Point *tP; A(const int& size); addPoint(int i, Point *P); } A::A(const int& size) { tP=new Point[size]; } A::addPoint(int i, Point *P) { (tP+i)->x=P->x; (tP+i)->y=P->y; (tP+i)->z=P->z; }
Cas 3: ("tableau de pointeurs")
------
Cette méthode me semble très efficace (du point de vue performances très certainement). Je suis cependant embêté par le fait que je fais des "Point *P=new Point()" suivis de "addPoint(i,P)" en divers endroits où cette classe est utilisée ... ce qui ne me semble pas super propre (difficile de contrôler, difficulté à faire un destructeur propre) ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Class A: { Point *tP[size]; A(); addPoint(int i, Point *P); } A::A() { } addPoint(int i, Point *P) { *(tP+i)=P; }
Quelle méthode me recommenderiez-vous? Quel est le destructeur dans chacun de ces cas?
Christian
Partager