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

Langage C++ Discussion :

Supprimer l'operateur delete[]


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut Supprimer l'operateur delete[]
    Bonjour,

    Je me demande si de nos jours l'operateur [] a toujours sa place dans le langage C++.
    Revenons tout d'abord sur l'origine de l'opérateur delete[].
    Au début du C++ (avant sa première sortie) il fallait supprimé un tableau comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int* a = new int[3];
    delete[3] a;
    Il fallait passer explicitement la taille du tableau a supprimer afin d'appeler les destructeurs de chacun des éléments du tableau.

    Mais de nos jours un simple appel a delete[] sans avoir a fournir explicitement le nombre de case du tableau peut déduire implicitement le nombre d'élément.

    Cet opérateur devrait selon moi être retiré et implémenté delete de facon a ce que l'opérateur soit capable de déduire implicitement si l'argument est un tableau ou non.

    De ce fait nous ne serons plus contraint de coder deux fois la même classe, une fois pour la version élement seul et une fois pour la version tableau.

    Mais je me demande,
    Pourquoi personne ne l'a proposé, un mécanisme serait-il mit en péril ?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Pour savoir combien d'élément effacer, le compilateur va ajouter de l'information en mémoire codant la taille. On pourrait considérer une allocation non tableau comme s'il s'agissait d'une allocation d'un tableau à un élément.

    Ça aurait des impacts de performance : Toute allocation non tableau prendrait un peu plus de mémoire que maintenant. Et le code à exécuter pour désallouer demanderait une complexité supplémentaire.

    Si les allocations tableau représentaient 99% des allocations, et les allocations normales 1%, ce surcoût serait peut-être acceptable, mais la réalité est plutôt l'inverse.

    De ce fait nous ne serons plus contraint de coder deux fois la même classe
    Par contre, là, je ne vois pas trop ce que tu veux dire. A part quelques rares classes de bas niveau (shared_ptr/shared_array), classes pour lesquelles la version array est d'une utilité limitée (shared_ptr<vector<T>>), je ne me rappelle pas trop avoir vu de duplication de code liée à ce sujet dans du vrai code.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Pour savoir combien d'élément effacer, le compilateur va ajouter de l'information en mémoire codant la taille. On pourrait considérer une allocation non tableau comme s'il s'agissait d'une allocation d'un tableau à un élément.
    Un petit bout de code en exemple là

Discussions similaires

  1. operateur delete et exception
    Par ram-0000 dans le forum C++
    Réponses: 9
    Dernier message: 30/04/2008, 21h06
  2. RMAN / DELETE OBSOLETE ne supprime pas les fichiers
    Par segphault dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 12/04/2006, 09h48
  3. surcharge operateur delete et héritage
    Par Hervé dans le forum C++
    Réponses: 5
    Dernier message: 29/03/2006, 13h59
  4. operateur delete
    Par ep31 dans le forum C++
    Réponses: 7
    Dernier message: 24/11/2005, 00h46
  5. [MFC] ADO et operateur delete
    Par 0xYg3n3 dans le forum MFC
    Réponses: 9
    Dernier message: 26/03/2005, 14h38

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