Как явно освободить дескрипторы GDI, выделенные производным классом TForm, принадлежащим Приложению? - PullRequest
0 голосов
/ 24 июня 2010

Один класс, производный от TForm, по-видимому, удерживает дескрипторы GDI, пока приложение не будет закрыто.

class TTestForm : public TForm {
  public:
    TTestForm(TComponent*);
};

std::auto_ptr<TTestForm> test(new TTestForm(NULL));
test->ShowModal();

Я довольно новичок в VCL, поэтому, пожалуйста, потерпите меня. Этот тест был сделан с формой, которая не содержит элементов управления. Насколько я понимаю, все объекты принадлежат Приложению, если не указан владелец.

Мое приложение динамически создает (и уничтожает) множество форм. 3-4 новых дескриптора GDI назначаются каждый раз, когда отображается форма. Есть ли способ явного освобождения этих дескрипторов GDI во время жизни приложения?

Ответы [ 2 ]

0 голосов
/ 16 июля 2010

Оказывается, что утечка была вызвана неправильно установленным свойством TImageList.ShareImages.

0 голосов
/ 13 июля 2010

Предостережение: я программист на Delphi, а не на C ++, но VCL - это, по сути, VCL.Вы можете попробовать метод Release () формы вместо free ().Или, в качестве альтернативы, в событии OnClose установите для параметра Action переданное значение caFree - это должно указывать VCL освобождать ресурсы окна при закрытии формы, а не скрывать ее.

Я полагаюДругой вопрос - вам нужно продолжать создавать / уничтожать формы?Можете ли вы создать их один раз, а затем использовать их снова?

...