IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

C++ et mémoire pour un null


Sujet :

C++

  1. #1
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut 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 c++ : 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
    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 c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    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,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 674
    Points : 10 686
    Points
    10 686
    Par défaut
    Il n'y a pas de pointeur dans ton code

    double coord[d]; n'est pas de type pointeur, donc il est créée automatiquement: c'est pour cela que le constructeur et le destructeur par défaut [vides] suffisent.

    Point<d> p; est local, donc pas de new.

    Sinon c'est la syntaxe classique parenthèse-parenthèse (non testé )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const int d = 2 ;
     
    double tab[152, 528];
     
    Point<d> p(tab);
    Point<d> p1(p);

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    merci :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Compilation] Pb de compilation pour une nulle
    Par kendras dans le forum C++
    Réponses: 26
    Dernier message: 07/06/2006, 16h47
  2. Réponses: 6
    Dernier message: 24/03/2006, 18h24
  3. mettre une image en mémoire pour réutilisation
    Par jani dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/11/2005, 15h14
  4. Economie de mémoire pour plusieur images avec la même source
    Par neness dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/01/2004, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo