我做过这样的事情:
//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的解构器中工作吗?
您可以使用默认的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树和所有权模型