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