Извиняюсь, если на этот вопрос уже был дан ответ, я не смог найти ответ.
Я занимаюсь рисованием в своем приложении 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)));
Требуется ли управление памятью, поскольку я не храню дескриптор создаваемой кисти? И если так, как бы я освободил память?
Функция CreateSolidBrush
не могу знать, как вы используете его. Он не может знать, что вы не храните ручку и поэтому выполняете автоматическую очистку. Поскольку документация CreateSolidBrush
указывает, что вы должны позвонить DeleteObject
с возвращенной ручкой вы должны убедиться, что соблюдаете эти требования.
Если вы не сохраните дескриптор, вы потеряете к нему доступ и не сможете гарантировать, что объект уничтожен.
Других решений пока нет …