在我的代码中,工作线程创建对象A,主线程B类析构函数调用工作线程的析构函数,对象A在工作线程的析构函数中被删除。代码是这样的:
WorkerThread::foo() {
Object *p = new Object;
}
WorkerThread::~WorkerThread {
delete p;
wait();
}
B::~B() {
emit signal();
//this signal is to ask worker thread to quit,
//the signal/slot connection is connect(this, SIGNAL), mWorkerThread, SLOT));
delete mWorkerThread;
}
现在的问题是工作线程的其他函数可能仍在使用 *p (object A)。我知道我可以在 WorkerThread 析构函数中添加互斥锁。但有时我收到错误消息,说不应该在没有创建它的线程中删除对象 A。这是否意味着我需要在工作线程中删除 *p ?我如何使它工作?使用另一个信号和插槽?
谢谢,