C++ - créer un objet statique ou dynamique?

Résolu/Fermé
nikoladu49 Messages postés 228 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 8 mai 2011 - 26 févr. 2010 à 17:13
 ouma - 19 nov. 2017 à 22:41
Bonjour,
je voudrais savoir quand créer, en c++, un objet statiquement, et quand créer plutôt un objet dynamiquement.
Pouvez vous m'expliquer?
Merci d'avance.
A voir également:

7 réponses

grou29 Messages postés 39 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 19 mai 2010 9
31 mars 2010 à 02:55
ok.
En général tu fais une allocation statique quand tu n'as pas besoin de l'objet après la sortie de ta méthode car l'objet est détruit a la sortie.
tu fais un new si tu veux gérer toi même la destruction de l'objet (avec delete)
dans une autre méthode.
clair ?

-
Grou29
http://lienssanslien.free.fr
merci
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
Modifié par Pacorabanix le 31/03/2010 à 03:36
il y a aussi le fait que des fois, on ne sait pas de combien d'objets on a besoin.
Alors tu as deux possiblités :

soit tu crées assez d'objets "statiquement" dans ton programme pour être sûr d'avoir une certaine flexibilité,

soit tu crées tes objets "dynamiquement" à la demande.

Imagine un carnet d'adresses.
Peut être qu'un utilisateur du programme aura une dizaine d'adresse dans son carnet, peut-être qu'un autre en aura 1000.

Si tu fais statiquement, le programme consommera la même mémoire dans le cas des 10 que dans le cas des 1000, car tu auras dû prévoir la place pour mille variables.
Alors que dynamiquement le fait d'avoir seulement dix noms utilisera beaucoup moins de mémoire.
nikoladu49 Messages postés 228 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 8 mai 2011 22
29 mars 2010 à 18:57
Je me permet de faire faire un petit up. Je sais que le sujet date un peu mais j'attend toujours un réponses.

Merci d'avance.
grou29 Messages postés 39 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 19 mai 2010 9
30 mars 2010 à 00:43
Peux être peux tu préciser ce que tu entends par "statiquement" (objet global, objet statique a un fichier, statique a une classe (agrégation) ...)

-
Grou29
http://lienssanslien.free.fr

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nikoladu49 Messages postés 228 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 8 mai 2011 22
Modifié par nikoladu49 le 30/03/2010 à 18:37
Et bien quand je dit statique, c'est par exemple:
classe objet(parametres);

et quand je dit dynamiquement, je veux dire:
classe *objet = new classe(parametres);


Ma question est donc: quand utiliser une des deux méthodes ci-dessous, et quand utiliser l'autre pour l'initialisation de mes objets?

J'espère que tu comprend mieux.
nikoladu49 Messages postés 228 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 8 mai 2011 22
31 mars 2010 à 17:44
Si on crée un objet statiquement ou dynamiquement, on en crée un seul pourtant. Par exemple si on prend les widgets de Qt, on les crée dynamiquement alors que l'on sais combien de widget on va créer.
grou29 Messages postés 39 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 19 mai 2010 9
31 mars 2010 à 20:57
En général (je ne connais pas bien Qt mais ca s'applique dans beaucoup de framework graphique) tu est responsable de la création des widgets et du délègue la destruction au framework (Qt ici). C'est donc bien un cas de création /destruction qui sont délocalisés.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
1 avril 2010 à 00:40
tout à fait, ce que je disais était à ajouter à ce que disait grou29, c'est tout :)
0
nikoladu49 Messages postés 228 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 8 mai 2011 22
9 avril 2010 à 18:57
A, d'accord, je comprend mieux :)
Merci à vous pour vos réponses.