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 :

Instanciation en C++


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut Instanciation en C++
    Bonjour,

    J'ai une question bête, mais ça n'empêche que je veux la comprendre
    En C++, quelle est la différence entre

    1) A a;
    2) A a=A();
    3) A *a= new A();

    d'après mes connaissances 1) instance statique de la classe
    2) instance dynamique de la classe
    et le 3) ???

    en pratique quelle est la différence entre la création d'une instance statique et d'une instance dynamique??

    Merci d'avance

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    1) ton instance est créée sur la stack. Elle sera automatiquement détruite quand tu sortiras du 'scope' où tu l'as déclaré.
    2) pareil que 1) sauf que, selon le compilateur, tu risques de créer un objet temporaire et de faire appel à un opérateur d'affectation
    3) ton instance est créée dans la heap, elle sera persistante à la sortie du 'scope' il faudra donc te débarrasser de ton instance avec un delete.

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Merci GeantVert pour ta réponse,
    SVP encore une explication de 2)
    Citation Envoyé par GeantVert13 Voir le message
    1) ..., tu risques de créer un objet temporaire et de faire appel à un opérateur d'affectation.
    Merci d'avance

  4. #4
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Vous confondez opérateur d'affectation et constructeur de copie.
    Et à ma connaissance, A a = A(); est toujours résolu en A a; Sauf que le compilo exige la présence d'un constructeur de copie non explicite.
    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 Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Oui en fait cette syntaxe permet au compilateur de partir du principe qu'il peut construire l'objet directement sans copie.

    Il n'y a que trois cas ou ce n'est pas vrai:

    - si les types respectifs des objets a droite et a gauche du egal sont differents( dans ce cas c'est une conversion)
    - si l'objet a droite du egal a un nom ( dans ce cas c'est une copie...)
    - si a droite du egal c'est une fonction (dans ce cas le resultat de la fonction devrais etre copie ou deplace (move semantic) mais selon les cas le compilateur peut aussi faire une optimisation ou l'objet de gauche est utilise directement, evitant ainsi une copie).


    Dans ton cas ici, c'est exactement comme 1.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    A a = A(); est toujours résolu en A a; Sauf que le compilo exige la présence d'un constructeur de copie non explicite.
    En effet, méa culpa, j'ai répondu un peu trop vite.

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Pour 1 et 2 du premier post, c'est le sujet du Guru of the Week n° 36 : http://cpp.developpez.com/gotw/36

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Pour 1 et 2 du premier post, c'est le sujet du Guru of the Week n° 36 : http://cpp.developpez.com/gotw/36
    Faudrait vraiment prévoir une page dédiée dans la partie C++. Je la verrai bien entre "TutorielsC++" et "Livres C++"

  9. #9
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Citation Envoyé par GeantVert13 Voir le message
    Faudrait vraiment prévoir une page dédiée dans la partie C++. Je la verrai bien entre "TutorielsC++" et "Livres C++"
    http://cpp.developpez.com/redaction/...pp/gotw/index/

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Voir également GOTW #1.

  11. #11
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par défaut
    Merci tout le monde pour vos réponses,

    je résume ce que j'ai compris: 1) et 2) revient à la même chose,

    mais est ce qu'il y a des cas où il faut utiliser le 2),
    les liens proposés n'explique pas mon cas A a = A()

    Merci d'avance

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    les liens proposés n'explique pas mon cas A a = A()
    Voir la première réponse qui t'a été fournie.

  13. #13
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    @oodini. Elle est fausse -- ou pourquoi j'ai posté ma première réponse.
    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...

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Sur quoi porte la fausseté ? Les optimisations du compilateur ?

  15. #15
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    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 296
    Par défaut
    Citation Envoyé par oodini Voir le message
    Sur quoi porte la fausseté ? Les optimisations du compilateur ?
    Citation Envoyé par GeantVert13 Voir le message
    2) pareil que 1) sauf que, selon le compilateur, tu risques de créer un objet temporaire et de faire appel à un opérateur d'affectation
    Citation Envoyé par Luc Hermitte Voir le message
    Vous confondez opérateur d'affectation et constructeur de copie.
    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...

Discussions similaires

  1. [Reflection] Instancier un objet
    Par bl@st dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 28/10/2008, 11h09
  2. [POO] Instancier un objet avec le nom de la classe
    Par shinchun dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2006, 13h44
  3. [JAR] instancier une Image contenue dans un jar
    Par celine31 dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2005, 15h55
  4. [Débutant(e)]servlet qui instancie une classe personelle
    Par NiBicUs dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/02/2005, 12h00
  5. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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