我做过这样的事情:
//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();
我应该删除 thr 并在 mainwindow 的解构函数中工作吗?
您可以使用默认的 Qt 方式来管理内存,方法是将父级分配给QThread
,即这样做:
QThread *thr = new QThread(this);//the mainwindow's is now the thread parent
在 Qt 中,父母负责管理孩子的记忆。就这样QThread
需要时会自动删除。
那么,为了你的soundWorker
,您有几种不同的解决方案。如果它的寿命和你的一样mainwindow
,正如您在询问是否应该在析构函数中删除它时所暗示的那样mainwindow
,您可以简单地使其成为非指针成员,然后它的存储持续时间将被自动处理。
不过,parent 是 Qt 特有的。一般来说,当您自己处理内存时,您应该使用包装器(例如智能指针)来启用RAII http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization.
进一步阅读:Qt 树和所有权模型 http://qt-project.org/doc/qt-5/objecttrees.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)