Вы можете использовать по умолчанию Qt способ управления памятью с помощью присвоения родителя к QThread
, то есть сделать это:
QThread *thr = new QThread(this);//the mainwindow's is now the thread parent
В Qt, родители несут ответственность за управление памятью своих детей. Таким образом, QThread
будет автоматически удаляться по мере необходимости.
Затем для вашего soundWorker
у вас есть несколько различных решений. Если его время жизни совпадает с вашим mainwindow
, как вы намекаете, когда вы спросите, следует ли его удалить в деструкторе mainwindow
, вы можете просто сделать его членом, не являющимся указателем, и его время хранения будет автоматически обрабатываться.
Родительская вещь специфична для Qt. В общем, когда вы имеете дело с памятью, вам следует прибегнуть к оберткам (например, умным указателям), которые позволяют RAII.
Дальнейшее чтение: Qt Trees and ownership model
* Тогда для вашего звукового стола вы можете сделать то же самое, что и QObject. * Нет, он не может. Родитель и ребенок должны жить в одной теме. Если он это сделает, он получит предупреждение ['QObject :: moveToThread: Невозможно переместить объекты с родителем'] (http://code.woboq.org/qt5/qtbase/src/corelib/kernel/qobject.cpp.html # 1462). – thuga
К сожалению, я забыл, что я отредактирую. – JBL