有两个类: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()WorkerprocessEvents()doWork()WorkerShouldStopdoWork()Widgetm_editWidget
问题:
- 如何干净地删除 Worker?
- 避免这种相互作用的最佳设计是什么?