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 :

[debutant]Portée d'un objet et creation avec new


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut [debutant]Portée d'un objet et creation avec new
    Bonjour,

    Une confusion atroce m assaille

    Y a t il une difference entre

    TypeObjet nomObjet (param);

    et

    TypeObjet nomObjet = new TypeObjet (param);

    Si oui, la portee de la seconde ligne depasse t elle le bloc auquelle elle appartient (mes souvenir me disent ke le new met l objet dans le tas donc lui accorde une vie en dehors du bloc...)?

    Si non, comment creer un objet dans une fonction et renvoyer sa reference sans utiliser de pointeur?

    Vaut il mieux retourner une reference sur un objet créé dans une fonction ou alors l'objet lui meme (et surtout pkoi)?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    La première est une instance d'un élément.

    La seconde, tu alloues une zone mémoire pour accueillir une instance d'une nouvelle classe et tu as un pointeur pointant sur cette instance.

  3. #3
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Y a t il une difference entre
    TypeObjet nomObjet (param);
    et
    TypeObjet nomObjet = new TypeObjet (param);
    Oui, la première déclaration crée un objet local, c'est-à-dire qu'à la sortie de la fonction cet objet sera détruit. La seconde déclaration crée un objet dynamique, cet objet ne sera détruit que lors d'un "delete nomObjet".

    Si non, comment creer un objet dans une fonction et renvoyer sa reference sans utiliser de pointeur?

    Vaut il mieux retourner une reference sur un objet créé dans une fonction ou alors l'objet lui meme (et surtout pkoi)?
    Bien que le compilateur permette de retourner l'adresse d'un objet local dans une fonction, cela est une erreur de le faire, puisque l'objet sera détruit aussitôt après le "return", et l'adresse sera donc invalide.

  4. #4
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Merci pour vos reponses.

    Quand je parle de retourner un objet creé dans une fonction, je parle a ce momment la d'un objet dont l'espace viens d'etre alloué dynamiquement dans le tas par un new, donc non detruit a la sortie de la fonction.

    Est il preferable de retourner l'objet ou sa reference, y at il rellement une difference entre:

    typeObjet mafonction ()
    {
    typeObjet monObjet = new typeObjet ();
    return monObjet;
    }

    et

    typeObjet & mafonction ()
    {
    typeObjet monObjet = new typeObjet ();
    return monObjet;
    }

    Dans les deux cas, la fonction ne retourne t elle pas une adresse? ou alors dans le premier cas, une copie est elle crée?

  5. #5
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Avec le & tu t'évite une copie virtuelle de ton objet car tu retournes une référence, ce qui sauve des ressources. Sans le & tu retourne une copie de l'objet.

    N'oublie pas cependant que tout ce qui est créer avec un new nécessite une destruction explicite avec delete (ou delete [] si c'étais un array)


  6. #6
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Merci,

    juste une precision avant de marquer le sujet resolu:

    Si je retourne une copie virtuelle, je perd la main sur l'objet créé donc g une fuite memoire, on est d'accord?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/12/2008, 18h54
  2. Réponses: 10
    Dernier message: 23/11/2004, 18h14
  3. [debutant][Port COM]
    Par Shooter dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/07/2004, 09h43
  4. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43
  5. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

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