2016-10-30 47 views
0

在我的代码中的一些问题,我有:智能指针和QThread的问题

QThread* thread = new QThread; 
Beacon *beacon = new Beacon(beg, end); 
beacon->moveToThread(thread); 

而且有一天,我正在读这个东西叫做智能指针。如果我的理解,它可能适合在上面代码的和平,我想:

std::unique_ptr<QThread> thread {new QThread}; 
std::unique_ptr<Beacon> beacon {new Beacon(beg, end)}; 
beacon->moveToThread(thread); 

这导致:

error: no viable conversion from 'std::unique_ptr<QThread>' to 'QThread *' 
    beacon->moveToThread(thread); 

有什么不对?

+1

'moveToThread(thread.get())' –

回答

1

您需要将原始指针(Qthread *)传递给moveToThread。您必须使用unique_ptr::releasethread.release())或unique_ptr::getthread.get())以获取原始指针,具体取决于您尝试实现的目标。

+0

但是传递原始指针我仍然安全(使用智能指针的好处)? – KcFnMi

+1

是的,如果你使用get(),你的unique_pointer会保持它的所有权(例如,应该在某个时候删除被管理的数据)。 release()不会那样做,尽管... @KcFnMi – HazemGomaa