Окно GLFWwindow * по-прежнему указывает на действительный объект glfw? - PullRequest
0 голосов
/ 01 августа 2020

Я инициализирую Glfw, создаю окно и устанавливаю обратный вызов прокрутки:

GLFWwindow * window = glfwCreateWindow (...);
glfwSetScrollCallback(window, GlScrollInput);

У меня есть где-то еще функция:

GlScrollInput (GLFWwindow * window, double x, double y){...}

Допустим, после первого использования я сохранил этот указатель GLFWwindow * window . Есть ли способ узнать, действителен ли этот указатель окна glfw (окно инициализируется, а не уничтожается или не завершается)?

1 Ответ

1 голос
/ 01 августа 2020

Вы должны сами следить за этим. В общем, никакая структура C ++ не может проверить, действителен ли еще необработанный указатель.

Если память, на которую указывает указатель, освобождена, доступ к ее содержимому теперь будет неопределенным. В этом разделе ОЗУ может быть любое значение, поэтому любая проверка, которую вы сделаете, даст вам в лучшем случае случайный ответ или в худшем - segfault.

TL; DR при работе с указателями на C ++ вы обязаны отслеживать время жизни ваших объектов.

Когда окно в GLFW уничтожается, его содержимое будет освобождено, что приведет к описанному выше сценарию.

...