Статическая переменная-член в этом случае является указателем. Вы не можете освободить его, но вы можете освободить то, на что оно указывает:
SDL_FreeSurface(ball_image);
Затем вы можете установить ball_image
на 0, чтобы зафиксировать факт, что у вас больше нет изображения.
он может быть освобожден, только если уничтожены все экземпляры класса
Если под "классом" вы подразумеваете ball
, то нет. Статические члены ball
продолжают существовать независимо от количества экземпляров ball
. Единственный способ, которым статический член может быть уничтожен перед выходом из программы, - это сделать что-то (зависящее от реализации), например, выгрузить dll, которая содержит класс. Но в этом случае статический член является просто указателем, поэтому (1) его уничтожение просто уничтожит указатель, а не указатель, и (2) нет необходимости уничтожать указатель в любом случае, он не занимает значительных ресурсов.