Почему именно я должен вообще освободить поверхность (переменные являются локальными?)?
Указатель loadedSurface
является локальным.Фактическая поверхность не такова: внутри IMG_Load
есть нечто похожее на malloc
.Так же, как вы используете free
для памяти, выделенной с помощью malloc
, вы используете SDL_FreeSurface
для поверхностей, выделенных с помощью IMG_Load
(или SDL_CreateRGBSurface
и т. Д.).
Почему все нормальнопозволить созданной текстуре быть без вызова SDL_DestroyTexture?
SDL_DestroyTexture
вызывается внутри LTexture::free
, который вызывается деструктором LTexture
.Так что SDL_DestroyTexture
гарантированно будет вызываться в какой-то момент, если вызван loadFromFile
.
Что именно это означает, когда я уничтожаю текстуру или освобождаю поверхность?
Это означает то же самое, что использование free
в памяти, выделенной с помощью malloc
, или использование delete
в памяти, выделенной с помощью new
, или вызов std::unique_ptr::reset
(без аргумента) и так далее.Каждый вариант делает что-то свое.Если вы хотите узнать, что именно отличается между SDL_DestroyTexture
, SDL_FreeSurface
, free
и т. Д., Вы можете взглянуть на исходный код: SDL является открытым исходным кодом, и существует довольно много реализаций с открытым исходным кодом free
..