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 :

Declarer instance de Classe sans l'initialiser


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Par défaut Declarer instance de Classe sans l'initialiser
    Bonjour

    Tout d'abord Bonnes Fetes.

    Je viens du Delphi, et je tripatouille le C++ depuis peu.
    Embedded VC++ 4 , sous XP

    Pardon si ma question semble nigaude pour certains.

    Il semble qu'en C++ quand on declare un objet, celui ci s'initialise immediatement.

    Est il possible de declarer un objet dans une librairie, de facon
    a ce qu'il soit NULL.
    Et qu'on ne l'initialise qu'en cas de besoin ? du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Clas_Obj_Truc Obj_Truc = NULL;
    ...
    Obj_Truc = Clas_Obj_Truc.Clas_Obj_Truc;//Initialisation ==> création réelle des infos(variables...)
    S'il Existe un truc dans ce gout là je suis preneur

    merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Bonjour et bonnes fêtes à toi :p

    Ce que tu veux faire est possible mais en passant par les pointeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Clas_Obj_Truc obj_Truc* = 0;
     
    //plus loin dans le code :
     
    obj_Truc = new Clas_Obj_Truc();
    Par contre il ne faut pas oublier de libérer la mémoire. En gros tu as trois manières de gérer la mémoire en C++ :

    - statique : initialisée au début du progframme, libérée à la fin.
    - automatique, ou allocation sur la pile :

    L'instance est initialisée immédiatement, et détruite lorsque tu sors de la portée courante.

    - dynamique : l'exemple que je t'ai donné. La variable ne sera détruite que lorsque tu feras un appel explicite à delete (à ne surtout pas oublier sinon tu as un memory leak).

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Est il possible de declarer un objet dans une librairie, de facon
    a ce qu'il soit NULL.
    Et qu'on ne l'initialise qu'en cas de besoin ? du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Clas_Obj_Truc Obj_Truc = NULL;
    ...
    Obj_Truc = Clas_Obj_Truc.Clas_Obj_Truc;//Initialisation ==> création réelle des infos(variables...)
    Quel intérêt ?
    Il suffit de déclarer un objet que quand tu l'initialises.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Par défaut
    @bolhrak
    Grand Merci c'est exactement ce qu'il me fallait.

    @loufoque
    j'étais sur que j'aurais droit a cette reponse.
    J'ai acquis une vilaine habitude consistant a avoir un 3 objets que je declare en global, et que la pluspart de mes appli appels tres souvent.
    Je voulais juste transposer ca sous EVC.

  5. #5
    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
    extern ne suffit pas?
    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...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 12
    Par défaut
    extern ne suffit pas?
    C'est quoi extern ?
    et comment l'exploiter ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Au fait, passer par de la mémoire non initialisée est bien plus performant que de faire une allocation dynamique.
    boost.optional fait ce genre de choses.

  8. #8
    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 smk01
    C'est quoi extern ?
    et comment l'exploiter ?
    Si tu veux déclarer une variable globale, cela se fait avec extern. Par contre, il faut toujours la définir (!= déclarer) une fois et une seule dans une unité de traduction.

    Si tu veux quelque chose qui ne sera construit qu'à la première fois où tu en as besoin => variable locale statique, ou singleton si tu veux une globale déguisée.
    Il y existe plusieurs façon de faire des singletons 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. Initialisation des instances de classe global
    Par yan dans le forum Langage
    Réponses: 10
    Dernier message: 17/10/2012, 11h42
  2. Declarer un pointeur vers une classe sans new ?
    Par zi_omnislasher dans le forum C++
    Réponses: 15
    Dernier message: 28/09/2007, 11h51
  3. Réponses: 6
    Dernier message: 18/05/2007, 11h55
  4. Instance de classes
    Par KymZen dans le forum Tkinter
    Réponses: 9
    Dernier message: 07/04/2005, 08h35
  5. Conditions de destruction des instances de classes
    Par elvivo dans le forum Général Python
    Réponses: 4
    Dernier message: 29/12/2004, 17h16

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