Нужно ли удалять указатель на QRunnable

352
20 декабря 2016, 22:17

Использую так называемый QThreadPool и закидываю в него указатель на QRunnable. Такой код:

void QThreadPoolServer::incomingConnection(qintptr handle)
{
    QSocketRunnable *runnable = new QSocketRunnable(handle);
    this->thread_pool->start(runnable);
}

Нужно ли "ручками" очищать QRunnable? Или метод QThreadPool::start() сам всё сделает?

Answer 1

В справке:

If auto-deletion is enabled, QThreadPool will automatically delete this runnable after calling run(); otherwise, ownership remains with the application programmer.

Что в переводе:

Если автоудаление включено (по умолчанию это именно так), то пул потоков самостоятельно уничтожит объект QRunnable после выхода контекста выполнения из метода QRunnable::run(). В обратном случае ответственность за удаление объекта лежит на вызывающей стороне (на разработчике приложения).

Предупреждение

Следует быть осторожным при использовании автоматического удаления объектов QRunnable и связки QThreadPool::releaseThread() / QThreadPool::reserveThread(). В отдельных случаях возможны утечки памяти.

READ ALSO
Не добавляет экземляр в конец линейного списка

Не добавляет экземляр в конец линейного списка

Не добавляет нового студента в конец списка

290
Междустрочный интервал Qt

Междустрочный интервал Qt

Нужно увеличить высоту строк в многострочном тексте QLabelНо, не нашел решения с QFont и QStyleSheets

523