有两个类:Widget
和Worker
。这是一个示意图代码。
class Widget
{
Worker *m_worker;
QTextEdit *m_edit;
public:
Widget():m_edit(new QTextEdit){}
~Widget()
{
m_worker->ShouldStop = true;
delete *m_worker;
}
void doWork()
{
m_worker = new Worker;
if (!worker->doWork())
m_edit->setText("failed");
}
}
class Worker
{
Worker() : ShouldStop(false){}
public:
bool ShouldStop;
bool doWork()
{
while(true && !ShouldStop)
{
QThread::sleep(1);
QApplication::processEvents();
}
//consider the work undone if a stop was forced
if (ShouldStop)
return false;
}
}
在调用方法doWork()
中的Widget
执行循环之后。然后关闭一个小部件,并在其中一次调用期间调用它的析构函数。然后执行然后返回到. 它现在检查并返回的并尝试向. 但是对象已经死了。doWork()
Worker
processEvents()
doWork()
Worker
ShouldStop
doWork()
Widget
m_edit
Widget
问题:
- 如何干净地删除 Worker?
- 避免这种相互作用的最佳设计是什么?