谁删除了在工作线程中创建的对象?

时间:2013-01-15 23:18:18

标签: multithreading qt

在我的代码中,工作线程创建对象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(对象A)。我知道我可以在WorkerThread析构函数中添加互斥锁。但有时我收到错误消息,说不应该在没有创建它的线程中删除对象A.这是否意味着我需要在工作线程中删除* p?我该如何运作?使用另一个信号和插槽?

谢谢,

1 个答案:

答案 0 :(得分:0)

如果可能,请在线程的run()函数中创建并销毁对象。

如果对象必须存在于调用线程中(例如,Qt喜欢小部件存在于主线程上),那么在线程对象的构造函数中创建它(或传入它)并像在现在一样在析构函数中删除(这个)假设你的线程在完成后被调用者线程销毁了。)

此外,在删除之前发出kill信号,join()线程,以确保它完全干净。