SFML, технический вопрос про белый квадрат

101
11 мая 2021, 05:00

Рассмотрим следующий код:

void loadSprite(Sprite &sprite)
{
    Texture texture;
    texture.loadFromFile("texture.bmp");
    sprite.setTexture(texture);
}

Мне хорошо известно, что данный код некорректен, и целевой спрайт после вызова такой функции при отрисовке будет белым, потому что спрайт ссылается на текстуру, а текстура была локальным объектом функции.

Меня интересует другое.

Почему при отрисовке спрайта отрисовывается белый квадрат, а не падает все приложение из-за ошибки сегментации?

Я могу предположить две причины:

  1. Деструктор текстуры сбрасывает связи во всех спрайтах, которые ссылаются на данную текстуру. Это предположение мне кажется маловероятным, потому что иначе текстуре придется хранить связи с каждым спрайтом.
  2. Текстуры (и многое другое) аллоцируются внутри SFML, то есть при помощи менеджера памяти/ресурсов самой SFML. Но в этом случае я не совсем понимаю, как спрайты узнают о том, что текстура перестала существовать. То есть, не ясно, как спрайт связывается с текстурой: посредством указателя, ID или еще как-то.

Очень хотел бы разобраться в том, как это работает внутри, чтобы лучше понимать, где могут возникнуть проблемы и как их решать.

READ ALSO
Парсинг QByteArray

Парсинг QByteArray

Есть контейнер, содержащий последовательность байт:

95
Показать/скрыть DIV с помощью радиокнопок

Показать/скрыть DIV с помощью радиокнопок

Я совсем новичок в JS, помогите, пожалуйста, разобраться

90
React и jQuery… what?

React и jQuery… what?

Вопрос касательно библиотеки ReactНасколько я знаю, она почти всегда конфликтует с другими библиотеками, работающими с DOM

130
Не убивается процесс из определённой папки

Не убивается процесс из определённой папки

Как решить проблему убийства процесса запущенного из определённой папки ?

96