Statyczna zmienna składowa w tym przypadku jest wskaźnikiem. Nie można go zwolnić, ale można zwolnić, co wskazuje na:
SDL_FreeSurface(ball_image);
Można wtedy chcesz ustawić ball_image
0, do zarejestrowania faktu, że nie masz już obraz.
może być zwolniona tylko wtedy, gdy wszystkie instancje klasy są niszczone
Jeśli przez „klasa” znaczy ball
, to nie. Członkowie statyczni ball
nadal istnieją niezależnie od tego, ile wystąpiło w nich instancji ball
. Jedynym sposobem, w jaki statyczny element członkowski może zostać zniszczony przed zakończeniem programu, jest wykonanie pewnych czynności (zależnych od implementacji), takich jak rozładowanie biblioteki DLL zawierającej tę klasę. Ale w tym przypadku element statyczny jest tylko wskaźnikiem, więc (1) jego zniszczenie spowoduje tylko zniszczenie wskaźnika, a nie pointee, i (2) nie ma potrzeby, aby i tak zniszczyć wskaźnik, nie zajmuje on znacznych zasobów.
Usunięto moją odpowiedź, która była podobna do twojej, ale nie tak dokładna. – Nate
Mój pomysł polegał na zrobieniu tego tak, jak opisałeś w 2., ale myślałem, że może być lepszy sposób. Co to jest inteligentny wskaźnik? Nigdy wcześniej o tym nie słyszałem. Brzmi jak odśmiecanie. – user299831
Inteligentny wskaźnik to obiekt, który posiada wskaźnik, pozwala na użycie go tak, jakby był wskaźnikiem i zwalnia tę pamięć dla wskaźnika, gdy jest zniszczony (często robi się to poprzez liczenie odniesień, aby zobaczyć, czy istnieje są jakiekolwiek odniesienia do wskaźnika). Jest podobny do usuwania śmieci, ponieważ zarządza pamięcią dla ciebie, ale jest to oddzielna koncepcja. Dodałem link do implementacji boost. Jest na nich mnóstwo informacji - w tym na wikipedii. Ponadto, jeśli po prostu przeszukujesz inteligentne wskaźniki w SO, otrzymasz szereg pytań z nimi związanych. –