Управление памятью, когда не хранятся дескрипторы, возвращаемые функциями

Извиняюсь, если на этот вопрос уже был дан ответ, я не смог найти ответ.

Я занимаюсь рисованием в своем приложении Win32, и у меня довольно много сценариев, когда мне нужно рисовать объект (например, прямоугольник) только один раз. В настоящее время я создаю кисти для этого следующим образом:

HBRUSH sampleBrush = CreateSolidBrush(RGB(1, 119, 158));
SelectObject(myDC, sampleBrush);
// Do some painting on DC using brush
DeleteObject(sampleBrush);

Создать кисть, сохранить ручку, выбрать в DC, использовать кисть, освободить память.

Однако, если бы я сделал следующее:

SelectObject(myDC, CreateSolidBrush(RGB(1, 119, 158)));

Требуется ли управление памятью, поскольку я не храню дескриптор создаваемой кисти? И если так, как бы я освободил память?

0

Решение

Функция CreateSolidBrush не могу знать, как вы используете его. Он не может знать, что вы не храните ручку и поэтому выполняете автоматическую очистку. Поскольку документация CreateSolidBrush указывает, что вы должны позвонить DeleteObject с возвращенной ручкой вы должны убедиться, что соблюдаете эти требования.

Если вы не сохраните дескриптор, вы потеряете к нему доступ и не сможете гарантировать, что объект уничтожен.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]