Контекстное меню в qt+утечка памяти в стандартных примерах

Давным давно нашел реализацию контекстного меню для table widget и пользовался ею до сегодняшнего момента, пока не нашел утечку памяти.

Выявилась утечка благодаря тому что я начал использовать в контекстном меню иконки изображений, их около 10, и разом они сжирали по 700 кб оперативки за каждый вызов меню.

Выглядит утечка так

void MainWindow::slotCustomMenuRequested(QPoint pos)
{
 QMenu * menu = new QMenu(this);
 QAction * editDevice = new QAction(trUtf8("Редактировать"), this);
 QAction * deleteDevice = new QAction(trUtf8("Удалить"), this);
 connect(editDevice, SIGNAL(triggered()), this, SLOT(slotEditRecord())); // Обработчик вызова диалога редактирования
 connect(deleteDevice, SIGNAL(triggered()), this, SLOT(slotRemoveRecord())); // Обработчик удаления записи
 menu->addAction(editDevice);
 menu->addAction(deleteDevice);
 menu->popup(ui->deviceTableView->viewport()->mapToGlobal(pos));
}

Как ни странно, но подобный пример можно увидеть в каждой статье найденной в гугле.

Что же в этом примере не правильно? — а то  что при каждом запросе мы выделяем память под новое контекстное меню, и очищается память классом родителем (this)только когда вы завершаете работу приложения.

Собственно вывод, создавать контекстное меню надо в конструкторе!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *