J'apprends un peu de C++ par moi-même, et je ne suis pas entièrement sûr d'avoir une bonne compréhension de la gestion de la mémoire. Je ne connais que Java et un peu de PHP et de Python, donc c'est un peu nouveau pour moi. Je travaille également avec SDL - cela m'a semblé un moyen intéressant d'accélérer le processus d'apprentissage. Quoi qu'il en soit, j'essaye d'écrire une fonction de nettoyage qui libère toutes les surfaces qui ont été passées à une pile (j'utilise simplement la pile STL). Donc, j'ai le code suivant (abrégé):L'apprentissage de C++ et SDL- génère-t-il une fuite de mémoire?
#include <stack>
//stack of SDL_Surfaces
stack<SDL_Surface*> surfaces;
void clean() {
SDL_Surface *temp = NULL;
//loops through the stack depending on its size
while (surfaces.size() != 0) {
temp = surfaces.top();
SDL_FreeSurface(temp);
surfaces.pop();
} //while
if (surfaces.size() == 0) {
cout << "cleanup worked correctly" << endl;
} //if
}
//loading an image (this is in the main function)
background = load_image("background.bmp");
surfaces.push(background);
//cleaning time
clean();
Je ne suis pas sûr de la méthode de nettoyage. Je pensais que ce serait une meilleure façon d'implémenter la fonction SDL_FreeSurface plutôt que de spécifier manuellement chaque surface. Donc, si j'ai dessiné dix images à l'écran (disons dix vaisseaux) et que je les ai fait exploser, je devrais les supprimer correctement. Je créerais une pile pour ces 10 vaisseaux, et après leur destruction, je pourrais tout effacer, si cela avait du sens. Je suis inquiet que je complique trop les choses et introduit une toute nouvelle façon de causer des fuites de mémoire.
Des commentaires/remarques seraient les bienvenus! Je suis nouveau en C++ alors n'hésitez pas à me moquer de ma tentative futile de gestion de la mémoire.
Vous pouvez reformuler votre seconde phrase. Rappelez-vous que si vous n'utilisez pas le nouvel opérateur, aucune fuite de mémoire ne se produit car il n'est pas vrai que le nouvel opérateur ne générera pas de fuites de mémoire. – ForceMagic