如何释放Qthread对象的内存?

Nya*_*uko 4 c++ qt qthread

我做过这样的事情:

//in the mainwindow's constructor
QThread *thr = new QThread;
soundWorker * work = new soundWorker;
connect(this,SIGNAL(playsound()),work,SLOT(process()));
work->moveToThread(thr);
thr->start();
Run Code Online (Sandbox Code Playgroud)

我应该删除thr并在mainwindow的解构器中工作吗?

JBL*_*JBL 5

您可以使用默认的Qt方式来管理内存,方法是将父级分配给QThread,即:

QThread *thr = new QThread(this);//the mainwindow's is now the thread parent
Run Code Online (Sandbox Code Playgroud)

在Qt,父母负责管理孩子的记忆.因此,QThread将在需要时自动删除.

那么,对于你soundWorker,你有几个不同的解决方案.如果它的生命周期与你的生命周期相同mainwindow,当你询问是否应该在析构函数中删除它时mainwindow,你可以简单地使它成为非指针成员,然后它的存储持续时间将自动处理.

父事件是特定于Qt的.通常,当您自己处理内存时,您应该使用启用RAII的包装器(例如智能指针).

进一步阅读:Qt树和所有权模型