valeur de retour d'un new ? - C++ - Programmation
Marsh Posté le 16-10-2002 à 12:36:25
Bah si new ne te retourne pas d'adresse valide, c'est qu'il te retourne 0x00000000 (donc c'est NULL)
Il ne peut pas te retourner autre chose.
Maintenant il y a surement plusieurs façons de détecter un bug, mais si assert te convient, alors ne change pas
Marsh Posté le 16-10-2002 à 12:46:20
leneuf22 a écrit a écrit : Bah si new ne te retourne pas d'adresse valide, c'est qu'il te retourne 0x00000000 (donc c'est NULL) Il ne peut pas te retourner autre chose. Maintenant il y a surement plusieurs façons de détecter un bug, mais si assert te convient, alors ne change pas |
Citation : |
[url]http://www.ifrance.com/jlecomte/c++/c++-faq-lite/freestore-mgmt-fr.html#[16.5][/url]
Voila, donc d'apres eux new ne retourne jamais NULL !
Marsh Posté le 16-10-2002 à 12:53:40
Sous MFC, en effet, tu peux ecrire:
Code :
|
De toute façon, si le new echoue, y'a de forte chance que l'utilisateur n'arrive pas à faire grand chose avec ton programme, c'est que le système est complètement out of memory. Souvent y'a d'autre applies qui vont cracher avant la tienne!
Le seul gros avantage des exceptions, c'est comme d'hab, de simplifier le code, et de faire un seul catch à haut niveau, sans te soucier à plus bas niveau du control de la valeur de retour de chaque allocation. Le code est donc plus condensé, plus lisible, et plus robuste. Aucun risque d'oublier de controler un new.
Marsh Posté le 16-10-2002 à 12:56:55
hellbilly
Précision très interessante!
Marsh Posté le 16-10-2002 à 15:31:34
new(nothrow) retourne NULL en cas de Pb d'allocation et ne genere pas d'exception....
Marsh Posté le 16-10-2002 à 12:28:28
Jusqu'à présent je testais toujours le retour d'un new avec NULL pour voir si l'allocation a réussi. Mais je viens de lire que ca ne servait a rien car si l'allocation echoue une exception est lancee et la valeur de retour de new n'etait pas initialisée à NULL. C'est ce que dit apparemment la norme du C++. Mais dans tous les cours que j'ai lus soit new est testé avec NULL sans explication soit il est dit que la majorité des compilos le font donc pas de probleme.
De plus, dans la MSDN il est dit que new retourne NULL en cas d'echec ce qui me va pour le moment car j'utilise principalement VC++. Mais bon le jour ou je change de compilo ou de systeme je voudrais pas devoir tout modifier.
Donc, je peux continuer à tester avec NULL sans problème ou faut gerer l'exception ?
Merci.