Утечка памяти из-за SetBackgroundBitmap - PullRequest
0 голосов
/ 27 декабря 2011

Я добавил изображение (мозаичное) в качестве фона для класса, унаследованного от wxPanel

Внутри конструктора вторая строка ниже вызывает утечку памяти (сообщается в режиме отладки)

wxImage bg(_("images/textures/icobbg8.jpg"), wxBITMAP_TYPE_JPEG);

SetBackgroundBitmap(wxBitmap(bg));

Если я прокомментирую, утечка памяти SetBackgroundBitmap больше не сообщается. Примечание. Во время отладки и после просмотра стека вызовов я округлил это утверждение.

Скажите, пожалуйста, как преодолеть утечку памяти.

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Вы должны позвонить SetBackgroundBitmap(wxNullBitmap) в вашем деструкторе

Class MyPanel:public wxPanel
{
   MyPanel(wxWindow* parent, int x, int y, int w, int h);
   ~MyPanel();
};

MyPanel::~MyPanel()
{
   SetBackgroundBitmap(wxNullBitmap); //set null bitmap backgrond, so not 
                                      //reference bg to overcome the leak
}
1 голос
/ 27 декабря 2011

Когда выйдет конструктор, wxImage bg будет уничтожено. Однако класс все еще существует, и фоновое изображение все еще необходимо.

Попробуйте изменить bg с локального на атрибут класса.

...