Les premières choses en C++ delete
n'est pas une macro, c'est un opérateur. Deuxièmement, vous ne devriez pas utiliser new
et delete
, mais utiliser RAII, c'est-à-dire compter sur la portée de votre objet pour qu'ils soient désaffectés. Dès qu'un objet est hors de portée, son destructeur est appelé, ce qui vous permet de libérer et de finaliser. Ceci étant dit, le nettoyage derrière soi à la fin du processus est important surtout à des fins de débogage; Si quelque part dans votre routine de nettoyage vous laissez des choses derrière vous, cela signifie que vous avez un bug dans le code de nettoyage. Toutefois, du point de vue de la désallocation des ressources, il s'agit en fait d'une idée mauvaise de désallouer explicitement les ressources du système d'exploitation: Dans un processus de longue durée, le système d'exploitation échangera tout ce qui n'est pas activement utilisé. Donc, si vous avez un espace d'adressage alloué (par code, données ou autre) mais que vous ne l'utilisez pas, le système d'exploitation décidera de l'écrire dans l'espace d'échange ou (si les ressources ont été mappées depuis le stockage) les pages, de sorte que seulement quand il est consulté son repeuplé à partir du stockage.
Si toutefois votre processus se termine juste, le système d'exploitation peut simplement rejeter toutes les allocations sans second regard et, plus important encore, sans pagination dans le contenu de la mémoire de stockage. Lorsqu'un code de réinitialisation spécifique doit être appelé, cela se produit si nécessaire.
C'est exactement l'état d'esprit dans lequel le GLUT original a été conçu: Terminez simplement le processus une fois que vous avez fini de l'utiliser. Notez que dans un programme GLUT-ish, vous n'allez pas allouer d'objets dans main
. Cela se produira soit par une demande interactive de l'utilisateur dans l'un des gestionnaires d'événements en entrée, soit dans les fonctions inactives. Ce sont également les endroits où libérer des instances inutiles.
Si a, b, c (comme dans le code) sont destinés à être utilisés dans la boucle, ils doivent être alloués et libérés dans la boucle, pas dans la fonction en cours. – prabindh
Cochez [this] (http://stackoverflow.com/questions/2688098/cleaning-up-when-exiting-an-opengl-app) et [this] (http://stackoverflow.com/questions/5033832/what -le-plus-gentil-chemin-à-fermeture-glut) – Dan