Я просматриваю серию учебных пособий по SDL (написанных на C ++), используя Derelict и D. До сих пор преобразование было простым, но один элемент стиля авторов учебных пособий беспокоит меня, и я пытался выяснить, лучший способ обойти это. Но мои знания D не самые лучшие, поэтому я не уверен, что справлюсь с этим.
По сути, чтобы использовать SDL, я должен загружать файлы изображений в память как SDL_Surfaces. Перед выходом из программы эти поверхности необходимо вручную освободить с помощью SDL_FreeSurface (). Это кажется идеальным случаем для scope(exit)
и действительно работает очень хорошо ... для загрузки и выгрузки ресурсов в пределах одной функции. Но в идеале я бы разделил все это так, чтобы одна функция обрабатывала загрузку, а затем где-то другая функция освобождала их. И, кроме того, возможно, каждый ресурс обрабатывает сам себя. Я думаю, что это RAII, но я не совсем понимаю, как использовать его в D.
Я думал, что вы просто создали новый класс для переноса ресурса, загрузили его в this()
и освободили его в ~this()
, но, кажется, я прочитал, что деструктор не гарантированно будет вызван, если вы не создадите экземпляр класса как scope
. Я мог бы использовать структуру, я думаю, но, похоже, я бы упустил полезные преимущества классов, если бы я это сделал.
Что я хочу, так это загружать ресурсы и получать гарантии об их освобождении, но делать это разумным образом, не требуя от меня загрузки и выгрузки в один огромный метод. Как мне подойти к этому?