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 :

delete[] seulement pour des tableaux d'objets?


Sujet :

C++

  1. #1
    Membre confirmé Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par défaut delete[] seulement pour des tableaux d'objets?
    Bonjour à tous,
    J'ai lu (peut-être mal) dans un livre d'apprentissage du C++ que l'opérateur delete[] ne servait que pour des tableaux d'objets.
    J'ai donc quelques questions à ce propos.
    1) Est-ce exact?
    2) Si oui je peux donc supprimer un tableau de types 'primitifs' (char, int,... - je ne sais pas si le terme est exact) en faisant simplement un delete?!
    3) Est-ce une faute d'utiliser cet opérateur (delete[]) pour un tableau de type 'primitifs'?

    Merci d'avance,
    Crisanar

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    J'ai lu (peut-être mal) dans un livre d'apprentissage du C++ que l'opérateur delete[] ne servait que pour des tableaux d'objets.
    J'ai donc quelques questions à ce propos.
    1) Est-ce exact?
    Oui
    2) Si oui je peux donc supprimer un tableau de types 'primitifs' (char, int,... - je ne sais pas si le terme est exact) en faisant simplement un delete?!
    Non, ces types "primitifs sont aussi des objets
    3) Est-ce une faute d'utiliser cet opérateur (delete[]) pour un tableau de type 'primitifs'
    Non, c'est obligatoire.
    De fait, tu dois utiliser delete[] si tu as utilisé new[] et delete si tu as utilisé new

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Par défaut
    Effectivement certains livres l'oublient, notamment celui de Delannoy ((

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Les types primitifs ne sont pas des objets. Ce sont en revanche des données tout comme les objets.

    Le détail auquel il faut faire attention -> surtout pas de *alloc/free avec des objets, ce n'est valable qu'avec les types POD (plain old data: assemblage de types primitifs sans rien d'objet au milieu). Que cela soit un seul objet ou un tableau d'objets, il faut obligatoirement passer par la famille new/delete. Ce qui ne veut pas dire que l'on ne peut pas gérer des types POD avec la famille des new/delete.

    Après les new/delete, surtout les delete, sont à réserver au bibliothèques qui enveloppent, pour en faire abstraction, des concepts bas niveau. On passe vite au RAII (faq!, ou recherche avancée,! ou google!), sourtout quand on commence à avoir plusieurs ressources à gérer en même temps.

    => stricto-sensu
    1- non (le "que" est de trop)
    2- non,
    3- en rajoutant le contexte "tableau dynamique géré à la main et alloué avec new[]", non

    (Il y a aussi des bouquins à oublier ...)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #5
    Membre confirmé Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Par défaut
    Merci pour ces éclaircissements
    Luc, qu'entends-tu par "tableau dynamique géré à la main et alloué avec new[]"?

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    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
    // tableau dit "statique"
    {
        int t[42];
        .. code
    }
     
    // tableau dit "dynamique" (alloué par new[]) géré à la main
    {
        int * t = new[42];
        .. code
        delete [] t;
    }
     
    // "vecteur" (& autres enveloppes RAII)
    {
        std::vector<int> t(42);
        .. code
    }
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Luc :
    Les types primitifs ne sont pas des objets. Ce sont en revanche des données tout comme les objets.
    Tout est dans la définition du terme "objet" . Si tu entends par là instance d'une classe, tu as raison. J'ai toujours trouvé cette définition comme inutilement restrictive. Mais je ne suis pas expert (hélas).

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Il faut bien une convention dans le cadre d'un langage, d'une approche, ..., et c'est celle là qui est retenue en C++.
    Va expliquer ensuite avec cette restriction de vocabulaire les différences entre POD et objets, choses qui ne sont pas traitées exactement de la même façon en C++.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. openMP seulement pour des blocs itératifs ?
    Par Flynet dans le forum Threads & Processus
    Réponses: 4
    Dernier message: 19/08/2011, 14h34
  2. Pattern pour des contraintes entre Objet
    Par fabgamer dans le forum Design Patterns
    Réponses: 7
    Dernier message: 24/09/2010, 12h06
  3. Quel logiciel pour des tableaux de bord ?
    Par bebo11 dans le forum Autres produits SAP BO
    Réponses: 4
    Dernier message: 13/04/2010, 21h07
  4. Problème avec des tableaux d'objets
    Par flash link dans le forum SDL
    Réponses: 3
    Dernier message: 18/03/2009, 17h54

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