Я немного изучаю C ++ и не совсем уверен, что хорошо разбираюсь в управлении памятью.Я знаю только Java и немного PHP и Python, так что это немного ново для меня.Я тоже работаю с SDL - мне показалось, что это интересный способ ускорить процесс обучения.В любом случае, я пытаюсь написать функцию очистки, которая освобождает все поверхности, которые были переданы в стек (я просто использую стек STL).Итак, у меня есть следующий код (сокращенно):
#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();
Я не уверен насчет метода очистки.Я подумал, что это будет лучший способ реализовать функцию SDL_FreeSurface, а не указывать каждую поверхность вручную.Поэтому, если бы я нарисовал на экране десять изображений (скажем, десять космических кораблей), а затем взорвал их, мне нужно было бы их правильно удалить.Я бы создал стек для этих 10 кораблей, а затем, после их уничтожения, я мог бы уничтожить их всех, если это имеет смысл.Я беспокоюсь, что я слишком усложнил вещи и ввел совершенно новый способ вызвать утечку памяти.Я новичок в C ++, так что не стесняйтесь издеваться над моей тщетной попыткой управления памятью.