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 :

utilisation correct de l'allocation dynamique (new / delete)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Par défaut utilisation correct de l'allocation dynamique (new / delete)
    Salut à vous tous,

    J'ai deja plusieurs programme en C++, toujours avec Borland, mais ce n'etait jamais des programmes complexes.

    je suis actuelement en stage et je dois faire un programme en c++ avec borland 6. Et je me rends compte que j'ai plein de lacunes . Mes programmes marchaient mais a mon avis ils devaient etre tres mal programmer.

    je voudrais donc des petits conseil sur l'utilisation des new et delete.

    enfaite je ne sais pas vraiment quand il est necessaire, obligatoire ou interdit d'utiliser l'allocation dynamique.
    j'ai beau regarder les tuto et autre cours, je ne trouve pas vraiment de reponse.

    Par exemple pour le programme que je dois faire actuellement,

    je dois afficher un certain de nombre de donnée, toute bien ordonné, et sur plusieurs pages.

    j'utilise donc un PageControl avec les onglet pour naviguer sur les pages et j'y place des StringGrid pour afficher les données.

    Le truc c'est que je me demande si c'est mieux de créer le PageControl dynamiquement ainsi que les StringGrid. Ou si ca n'etait pas utile car ces objet ne prenne pas beaucoup de memoire. Et donc juste chargé mes donénes dynamiquement.

    ensuite je me demandais aussi si je devais supprimer (delete) le PageControl et les StringGrid des que l'utilisateur ne veut plus visualiser ses données ou si je devais juste jouer avec la proprieté visible ?

    Vous devez certainement trouver ces questions idiotes et vous pensez que ca devrait etre logique pour moi. Mais non donc merci pour votre aide.

    Vous pouvez remplacer les explications par des liens explicant clairement le pourquoi du comment de l'allocation dynamique.

    Je vous remercie d'avance.

    Cdt

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Si tu ne fais pas d'alloc dynamique, a priori tu alloues sur la pile, et donc ton objet est détruit quand tu quittes ta fonction. Des fois c'est ce qu'on veut (utilisation locale et temporaire), des fois non (on effectue alors une alloc dynamique).

    Quant au delete, en général il faut un delete pour new. Mais peut etre que les objets de la bibliotheque Borland sont automatiquement détruits (cf FAQ, doc...). Renseigne toi sur les pointeurs intelligents aussi.

    Un petit lien en passant:
    http://cpp.developpez.com/faq/cpp/?page=pointeurs

  3. #3
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    bonjour !

    fait appelle a delete a la fermeture du programme, et effectuvement, joue avec les propriete visible.

    Typiquement, fait appelle a new dans les constructeurs de tes formulaires et a deletes dans les destructeurs (c'est ce que je fait avec les winforms, je connais pas borland).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Par défaut
    enfaite je sais comment on les utilisent (du moins je pense) mais je ne sais pas vraiement a quel moment ils sont utiles ...

  5. #5
    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 VCL en C++ Builder ne s'alloue qu'avec un new, du fait qu'il s'agit d'un binding en Delphi <-> C++ de la VCL de Delphi. Et que ces derniers ne s'allouent que via un Create. Exemple TList.Create en delphi, donnera TList *lst = new TList(); en C++

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    On les utilise lorsqu'un objet est susceptible d'être réinitialisé à travers des types différents (je pense à l'héritage), ou lorsque que l'on veut qu'un objet ait une portée supérieure à celle dans laquelle on le créé. Entre autres.

    L'une des utilisations principales est le polymorphisme.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Par défaut
    Dans mon application je dois remplir des grille avec des valeurs. Et ces valeurs changent lorsque l'utilsiateur changent de projet. (un peu commme si l'utilisateur faisait ces comptes du moi de septembre dans un projet et qu'il ouvrait un autre projet pour le mio d'octobre).

    Est ce qu'il faut créer ces grilles (StringGrid dans mon cas) dynamiquement et les "deleter" à chaque fois que je change de projets (change de valeurs) ou dois je juste jouer sur les fait qu'elle soit visibles ou non et juste changer les valeurs ?


    (je crois que je viens de repondre à ma question tout seul en me posant la question, c'est bete de créer la grille pour la supprimer puis la recréer juste pour changer les valeurs).

    Je crois que je vais juste la créer au debut puis la supprimer lorsque l'utilisateur quiterra le logiciel.




    Par contre j'ai une autre quetion :

    j'ai un bouton, dans ce bouton je crée un objet ou un autre chose dynamiquement. je veux le "delete" dans un autre bouton.

    Moi je fais comme ça mais ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void __fastcall TForm1::boutoncréer(TObject *Sender)
    {
    TStringGrid* pStringGrid = new TStringGrid(Form1);
     
    /* J'utilise l'objet StringGrid */
    }
    puis l'autre bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm1::boutoncréer(TObject *Sender)
    {
    delete pStringGrid;
     
    }

    Mais quand je fais delete il me dit qu'il ne connais pas le pStringGrid. Je dois obligatoirement mettre la delcaration de pStrinGrid (TStringGrid* pStringGrid) dans la section public de la Form1.

    Si je met sla déclaration dans la classe de Form1, l'objet n'est pus créer dynamiquement, si ?


    Merci de m'eclaircir, je crois que j'ai encore beaucoup de mal avec l'allocation dynamique (et pas que ça )

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

Discussions similaires

  1. Utilisation des templates ou allocation dynamique
    Par PilloBuenaGente dans le forum Débuter
    Réponses: 4
    Dernier message: 12/05/2013, 19h20
  2. Allocation dynamique / new
    Par gooze dans le forum Débuter
    Réponses: 5
    Dernier message: 17/02/2009, 10h52
  3. Réponses: 8
    Dernier message: 20/11/2006, 00h13
  4. Allocation Dynamique de Memoire Avec Operateur New
    Par msstaf dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/06/2006, 15h49
  5. Réponses: 4
    Dernier message: 03/12/2002, 16h47

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