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")
------
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;
 
}
Cela semble OK, mais est-ce la bonne fa�on de faire en C++?

Cas 2 ("tableau dynamique")
------
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;
 
}
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.

Cas 3: ("tableau de pointeurs")
------
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;
}
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) ...

Quelle m�thode me recommenderiez-vous? Quel est le destructeur dans chacun de ces cas?
Christian