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 :

Surcharger les opérateurs "~" et "delete"


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut Surcharger les opérateurs "~" et "delete"
    Bonsoir les amis
    comment je peux surcharger l'opérateur "~" et comment je peux l'utiliser?
    c'est quoi la différence entre les opérateurs "~" et "delete" ?
    Merci.

  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
    On ne peut pas surcharger ~, qui n'est d’ailleurs pas un opérateur (en fait, il existe bien ~ en tant qu'opérateur unaire qui désigne la négation bit à bit, et qui est effectivement surchargeable, mais je pense que tu ne penses pas à ça ici).

    ~ permet de dénoter un destructeur, que ce soit pour le déclarer, le définir ou l'appeler explicitement (assez rarement une bonne chose, uniquement utile en combinaison avec le placement new).

    delete permet de détruire un objet pointé par un pointeur.

    Je ne suis pas certain de bien répondre à ta question, mais ma question est la suivante, plutôt que de partir des éléments du langage, pourrais-tu indiquer ce que tu cherches à obtenir ?
    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 émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 608
    Par défaut
    Salut,

    L'operator ~ est le non booléen bit à bit (différent du non logique "!"):
    ~1001 = 0110 (en écriture binaire)

    L'operateur delete est l'opérateur de désallocation mémoire (ne pas confondre avec le destructeur !!!), qu'il est en général très déconseiller de redéfinir à moins d'avoir une excellente raison et de savoir exactement ce que l'on fait, ce qui apparemment n'est pas ton cas

    Tu peux aller voir ici pour une liste (exhaustive ?) des opérateurs en c/c++.

  4. #4
    Membre actif
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    Merci infiniment
    voila maintenant je comprends de quoi s'agit-il
    qu'est ce que je veux obtenir?
    bon, je suis une formation de c++ et java
    dans un chapitre des opérateurs, puisque je ne comprends pas bien, j'ai posé une question a mon prof de c++
    si on surchargé le "~" est ce qu'il remplace le destructeur?
    il m'a pas donné une réponse, mais il m'a demandé de préparer une petite exposition concernant tous ça.
    merci encore une fois.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    si on surchargé le "~" est ce qu'il remplace le destructeur?
    Je pense que la question est plutôt orientée déclaration explicite du destructeur, pour remplacer le destructeur par défaut.
    En effet, dans une classe C++, si on ne défini pas le destructeur, il y aura un destructeur par défaut qui sera créé par le compilateur (comme le constructeur par défaut).
    Maintenant, il est possible de définir explicitement le destructeur d'une classe.
    (nom de la classe précédé du '~').
    Mais il n'est pas possible de surcharger le destructeur(contrairement au constructeur).
    Ca voudrait dire, définir plusieurs destructeurs de classe ayant le même nom, mais prenant des paramètres de différents types.
    Or il n'est pas possible de passer de paramètre au destructeur, puisqu'il est appelé lors du delete de l'objet.
    Pour bien comprendre, prenons un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    pObj = new <Classe>(1);  // appelle un constructeur; 
    pObj2 = new <Classe>("coucou");  // appelle un autre constructeur;
    ...
    delete pObj;   // appelle le destructeur
    delete pObj2;  // appelle le même destructeur
    Pour aller plus loin, je conseille :
    - Les destructeurs

    - Pourquoi et quand faut-il déclarer un destructeur virtuel
    Peu de personne pensent à déclarer "virtual" le destructeur d'une classe dérivée

Discussions similaires

  1. QGIS : lenteur pour afficher les listes des vues dans &quot;Ajouter une table PostGIS&quot;
    Par fafa63 dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 11/07/2014, 19h04
  2. surcharge les opérateurs in et out
    Par dingua dans le forum C++
    Réponses: 10
    Dernier message: 01/11/2009, 23h00
  3. Réponses: 6
    Dernier message: 08/08/2006, 09h14

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