Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1657 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Question bête sur "new"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question bête sur "new"

n°1512075
did-54
Posté le 08-02-2007 à 09:04:05  profilanswer
 

Bonjour,
 
Une petite question qui va vous sembler bête mais je ne trouve pas de vraie réponse sur le net.
Quel est l'intéret d'instancier une classe en utilisant le mot clé new ?
 
Voilà, ca se résume à ca :D

mood
Publicité
Posté le 08-02-2007 à 09:04:05  profilanswer
 

n°1512094
Taz
bisounours-codeur
Posté le 08-02-2007 à 10:22:16  profilanswer
 

Le fait est que new a rapport avec la classe d'allocation d'un objet et pas avec sa construction.

n°1512096
did-54
Posté le 08-02-2007 à 10:25:34  profilanswer
 

Taz a écrit :

Le fait est que new a rapport avec la classe d'allocation d'un objet et pas avec sa construction.


tu peux développer, je saisis pas la différence ....

n°1512125
Taz
bisounours-codeur
Posté le 08-02-2007 à 11:30:22  profilanswer
 

La personne qui t'as appris new ne te l'a pas dit ?

n°1512127
did-54
Posté le 08-02-2007 à 11:34:44  profilanswer
 

Taz a écrit :

La personne qui t'as appris new ne te l'a pas dit ?


non, sinon je demanderais pas :D
 (ou alors il l'a dit mais pas avec tes mots)
 
Tu sais, les profs ...

n°1512136
_darkalt3_
Proctopathe
Posté le 08-02-2007 à 11:44:56  profilanswer
 

did-54 a écrit :

Tu sais, les profs ...


On est pas encore vendredi :o


---------------
Töp of the plöp
n°1512140
did-54
Posté le 08-02-2007 à 11:52:05  profilanswer
 

bref, faut répondre là normalement :D
 
han, vous savez pas en fait :o

n°1512144
Taz
bisounours-codeur
Posté le 08-02-2007 à 12:00:45  profilanswer
 
n°1512149
ptitchep
Posté le 08-02-2007 à 12:10:11  profilanswer
 

http://en.wikipedia.org/wiki/Operator_new
 
New est un opérateur qui permet l'allocation dynamique de mémoire sur le tas ...
 

Code :
  1. Lapin blob (nom, age, nbOreilles); //crée un Lapin sur la pile (variable locale)
  2. Lapin *zorg=new Lapin [50]; //crée un tableau de 50 lapins sur le tas (qui ne sont pas détruits à la fin de la fonction/méthode)
  3. ...
  4. delete [] zorg; //destruction du tableau lapin (sinon fuite de mémoire)



---------------
deluser --remove-home ptitchep
n°1512151
ptitchep
Posté le 08-02-2007 à 12:12:25  profilanswer
 

http://fr.wikipedia.org/wiki/Alloc [...] C3%A9moire


---------------
deluser --remove-home ptitchep
mood
Publicité
Posté le 08-02-2007 à 12:12:25  profilanswer
 

n°1512155
did-54
Posté le 08-02-2007 à 12:29:07  profilanswer
 

Ok, c'est ce que j'avais compris, mais en pratique, quel est l'intéret d'allouer sur le tas  ?
 
Parceque si je fais jamais de delete, j'ai une fuite de mémoire non ?


Message édité par did-54 le 08-02-2007 à 12:29:34
n°1512156
Taz
bisounours-codeur
Posté le 08-02-2007 à 12:30:40  profilanswer
 

ben non t'as pas compris ni lu.

n°1512157
did-54
Posté le 08-02-2007 à 12:34:38  profilanswer
 

Taz a écrit :

ben non t'as pas compris ni lu.


je viens de le faire,
 
j'ai compris que l'allocation sur le tas permet de conserver notre objet en mémoire même en dehors de la méthode dans laquelle il est instancié. Le problème étant qu'on est ensuite responsable de la désallocation (ce qui n'est pas le cas lors de l'allocation sur la pile).
 
Mais ce que je ne vois pas, c'est un cas concret qui me forcerait à faire ca, avec tous les risques que ca comporte.

n°1512161
ptitchep
Posté le 08-02-2007 à 12:43:55  profilanswer
 

did-54 a écrit :


Mais ce que je ne vois pas, c'est un cas concret qui me forcerait à faire ca, avec tous les risques que ca comporte.


 

Code :
  1. int main ()
  2. {
  3.      int nbLapins;
  4.      Lapin* lapins=NULL;
  5.      cout<<"Combien de lapins voulez-vous créer? ";
  6.      cin>>nbLapins;
  7.      if (nbLapins>0)
  8.           lapins=new Lapin[nbLapins];
  9.      ...
  10.      if (lapins!=NULL)
  11.           delete [] lapins;
  12.      return 0;
  13. }


 
 
 
 


---------------
deluser --remove-home ptitchep
n°1512166
did-54
Posté le 08-02-2007 à 12:56:18  profilanswer
 

oui pour un tableau, mais pour un objet seul ?

n°1512175
ptitchep
Posté le 08-02-2007 à 13:17:54  profilanswer
 

did-54 a écrit :

oui pour un tableau, mais pour un objet seul ?


 

Code :
  1. Lapin* Lapin::seReproduire (Lapin& male)
  2. {
  3.       ... (censuré)
  4.       Lapin* nouveauPetit=new Lapin (nom,age,nbOreilles);
  5.       petitsAAllaiter.push_back(nouveauPetit);
  6.       return nouveauPetit ;
  7. }
  8. void Elevage::gerer()
  9. {
  10.      Lapin male ("blob",3,1.5);
  11.      Lapin femelle ("blib",3,1.5);
  12.    
  13.      Lapin *petit1=femelle.seReproduire(male);
  14.      ...
  15. }


 
dans cet exemple la femelle donne un petit qu'elle conserve dans petitsAAllaiter et renvoie le pointeur du petit à l'Elevage pour qu'il puisse le connaitre aussi.
Comme ça, un seul petit est créé, mais l'éleveur et sa mère le connaissent.
 
ça répond à la question?


---------------
deluser --remove-home ptitchep
n°1512187
did-54
Posté le 08-02-2007 à 13:48:16  profilanswer
 

Oui, merci :)

n°1512197
lorill
Posté le 08-02-2007 à 14:05:26  profilanswer
 

ca fait pas beaucoup d'oreilles, ca http://smileys.sur-la-toile.com/repository/Basse_cour/lapin.gif


Message édité par lorill le 08-02-2007 à 14:08:08
n°1512223
Taz
bisounours-codeur
Posté le 08-02-2007 à 14:43:15  profilanswer
 

Exemple pas forcément pertinent.
 
Un exemple pertinent : instancier conditionnellement un objet. Par exemple pour une relation de 0-1

n°1512244
ptitchep
Posté le 08-02-2007 à 14:55:48  profilanswer
 

Taz a écrit :

Exemple pas forcément pertinent.
 
Un exemple pertinent : instancier conditionnellement un objet. Par exemple pour une relation de 0-1


 
ben c'était un exemple vite fait d'où le:

ptitchep a écrit :


ça répond à la question?


 
mon premier exemple n'est pas une instanciation conditionnelle? Je crée le tableau (ou pas) selon des paramètres (ici l'entrée au clavier).
 
c'est a dire: une relation de 0-1?


---------------
deluser --remove-home ptitchep
n°1513084
patemino
Fan Club VP
Posté le 10-02-2007 à 21:20:45  profilanswer
 

En tout cas... l'exemple des lapins est terrible... :foudtag:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Question bête sur "new"

 

Sujets relatifs
question un peu bete sur le caractere "+"[Résolu] Dbgrid et Tpagecontrol Question bête
Question bête : pourquoi radio bouton ?[logiciel R] question bête
Question bete sur un CSSpetite question toute bête en java (synchronisation)
question bête sur le CQuestion bete sur un programme java
question beteQuestion tt bete
Plus de sujets relatifs à : Question bête sur "new"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR