5

कोड काम के मेकअप सरल टुकड़ा कोशिश कर रहा है:चलती std :: धागा

std::thread threadFoo; 

std::thread&& threadBar = std::thread(threadFunction); 

threadFoo = threadBar; // thread& operator=(thread&& other); expected to be called 

त्रुटि मिल रही है:

use of deleted function 'std::thread& std::thread::operator=(const std::thread&)'

मैं स्पष्ट रूप से एक rvalue संदर्भ, नहीं एक साधारण से एक के रूप threadBar परिभाषित करते हैं। ऑपरेटर को क्यों नहीं कहा जा रहा है? मैं एक थ्रेड को दूसरे स्थान पर कैसे ले जाऊं?

धन्यवाद!

उत्तर

12

नाम संदर्भ लालसा हैं। लालच रावल संदर्भों से बंधे नहीं हैं। आपको std::move का उपयोग करने की आवश्यकता है।

threadFoo = std::move(threadBar); 
+0

उत्तर के लिए धन्यवाद। क्या मुझे यह सही लगता है कि एक (और एकमात्र?) जिस तरह से अपेक्षित ऑपरेटर का उपयोग किया जा सकता है, अस्थायी थ्रेड ऑब्जेक्ट जैसे थ्रेडफू = std :: thread (threadFunction); '? – Kolyunya

+1

या तो एक अस्थायी या अनाम नाम जैसा कि आप 'std :: move' से प्राप्त करते हैं। –

+0

एक स्पष्टीकरण के लिए धन्यवाद! – Kolyunya

संबंधित मुद्दे