2016-10-30 5 views
0

は私が持っている:スマートポインタとQThread問題

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

そして、他の日、私は、スマートポインタと呼ばれるこの事について読んでいました。私は理解していれば、それは上記のコードの平和に収まるかもしれませんが、私が試した:

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

何が問題になっています:

std::unique_ptr<QThread> thread {new QThread}; 
std::unique_ptr<Beacon> beacon {new Beacon(beg, end)}; 
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