Co dzieje się ze statyczną zmienną, gdy jest zwracana jako odniesienie i przekazywana jako wskaźnik bezpośrednio do innej funkcji? Oczywiście zmienna utrzymuje się po powrocie funkcji, ale coś w tej całej koncepcji mnie martwi. W którym momencie następuje zwolnienie pamięci w sekwencji danych zajmowanej przez zmienną statyczną? Czy środowisko wykonawcze w magiczny sposób zauważa, kiedy już go nie potrzebuję, na przykład coś w rodzaju zbierania śmieci?Zwracanie statycznych zmiennych lokalnych jako odniesień
Aby dać przykład:
SDL_Rect* XSDL_RectConstr(int x, int y, int w, int h)
{
static SDL_Rect rect;
rect.x = x;
rect.y = y;
rect.w = w;
rect.h = h;
return ▭
}
void mainLoop()
{
while(isRunning)
{
pollEvents();
SDL_BlitSurface(someSurface, XSDL_RectConstr(0, 0, 100, 100), screen, NULL);
SDL_Flip(screen);
}
}
Co się dzieje rect
po SDL_BlitSurface() zwraca? Nie widzę, kiedy zostałaby uwolniona. Czy to nie byłby jakiś wyciek pamięci?
Więc nadal będzie on pochłaniał ogromne ilości pamięci, biorąc pod uwagę, że działa w nieskończonej pętli, prawda? Czy też zastępuje się za każdym razem, gdy wywoływana jest funkcja XSDL_RectConstr()? Ponadto, SDL_rect jest strukturą, a nie klasą, a zatem nie ma destruktora, ale myślę, że to nie ma znaczenia. – CaffeineAddict
To nadpisuje się, to jest problem. Każda struktura (i każda klasa) ma destruktor, jeśli go nie napiszesz, generowany jest jeden. – john
Nie "nadpisuje" niczego. To ten sam obiekt. Jedyną magią jest to, że nie jest skonstruowana, dopóki nie po raz pierwszy nie wejdziesz w tę funkcję; poza zwykłymi regułami scopingu, nie ma w tym nic innego, jak "statyczny" zdefiniowany w zakresie przestrzeni nazw. To jak statyczny "członek" funkcji. –