C++ et mémoire pour un null
Bonjour,
je développe habituellement en Java (j'ai de très lointaines connaissances en C), mais je dois utiliser Java Native Interface pour appeler du code C++.
Je me suis donc plongé (par curiosité... et bien grand mal m'en a pris...) dans le code C++ que je dois appeler depuis Java.
Malgré avoir lu les tutos sur l'allocations/désallocation en C++, j'ai des doutes sur ce code, je souhaiterai donc quelques explications svp.
Le développeur utilise la classe suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
template <int d> class Point
{
public:
double coord[d] ;
Point()
{
}
Point (const Point& p) // copy from Point
{
for (int i=0 ; i < d ; ++i) coord[i] = p.coord[i] ;
}
Point (const double* p) // copy from double*
{
for (int i=0; i < d ; ++i) coord[i] = p[i] ;
}
Point& operator = (const Point& p) // assignment
{
if ( this != &p ) memcpy(p.coord, coord, d) ; //for (int i=0; i < d ; ++i) coord[i] = p.coord[i] ;
return *this ;
}
double& operator [] (int i) // coordinate access
{
return coord[i] ;
}
const double& operator [] (int i) const
{
return coord[i] ;
}
const double* begin() const
{
return coord ;
}
const double* end() const
{
return coord+d ;
}
} ; |
qui est appelé ensuite dans une fonction.
Code:
1 2 3 4 5
|
const int d = 2 ;
Point<d> p ;
p[0] = 1.0 ;
p[1] = 2.0 ; |
Venant du java, j'ai été surpris que l'on utilise pas "Point<d> p = new Point()". Mais comme on n'initialise pas la classe, je suppose que l'appel à un constructeur vide grace au "new" est inutile. Ai je raison ?
Je suis ensuite surpris par le fait qu'il n'y ai pas de destructeur dans la classe, surtout à cause du fait que la classe contient un tableau de double.
"Point<p> p" une variable locale dans une fonction, donc elle devrait être automatiquement désalloué à la sortie de la fonction. Mais j'ai un doute sur le tableau.
Merci par avance,