Question sur le duo new/delete dans une fonciton

Question sur le duo new/delete dans une fonciton - C++ - Programmation

Marsh Posté le 21-05-2010 à 13:47:47    

Bonjour,
 
j'apprends le C++ et j'ai une question qui peut paraître stupide mais si dans une fonction A je crée un pointeur (genre string* t = new string;), je l'utiliser (bla bla). Est ce qu'une fois la fonction quittée le delete est implicite ou bien faut-il le faire à la main?
 
Merci


---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 21-05-2010 à 13:47:47   

Reply

Marsh Posté le 21-05-2010 à 13:48:58    

Tu dois avoir dans ton code autant de new que de delete.

Reply

Marsh Posté le 21-05-2010 à 13:52:50    

Merci.
Simple et précis.

 

Y a t il un moyen de contrôler l'espace mémoire utilisé par son programme?


Message édité par le fou le 21-05-2010 à 13:55:12

---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 21-05-2010 à 14:01:09    

Juste l'espace mémoire, c'est facile : il te suffit selon l'OS que tu utilises d'ouvrir l'outil de monitoring de processus (task manager sur windows, ps sur *nix, etc).
 
Malheureusement, cela ne donne qu'une information générale, et n'apporte aucune précision sur ce qui se passe dans le code. C'est utile pour vérifier que le code n'a pas un gros memleak (conso. mémoire qui augmente régulièrement sans justification), mais c'est à peu près tout.
 
Pour des analyses plus fines, tu as des outils d'audit d'exécution (insure++, purify, etc), mais ils sont souvent coûteux. Je ne sais pas s'il en existe de gratuits et de bonne qualité (je ne dis pas qu'il n'en existe pas, mais je ne connais pas trop les offres disponibles... p'têt valgrind ? ).  
Ces outils permettent de détecter non seulement les fuites mémoires de manière fine, mais également l'endroit du code où elles se produisent. Très utile.
 
Dernière précision : la consommation mémoire d'un programme, quel qu'il soit, ne diminue jamais. Elle ne peut que augmenter dans le temps (une "libération" mémoire permettant juste de pouvoir réutiliser de la mémoire au sein du processus en cours, cela ne diminue pas la consommation mémoire)

Reply

Marsh Posté le 21-05-2010 à 16:14:14    

http://www.boost.org/doc/libs/1_43 [...] rt_ptr.htm
 
N'abuse pas de l'instanciation d'objets par new/delete.
Si tu as juste besoin d'une string dans une fonction, tu la déclare simplement localement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed