मान लीजिए मैं:shared_ptr - संदर्भ द्वारा बनाम पास मूल्य से गुजरती
typedef boost::shared_ptr<Event> EventPtr;
एक थ्रेड पर, मैं एक Event
बनाने रहा हूँ और यह बंद भेजने भेजा करने के लिए:
Event* event = new Event();
EventPtr eventPtr(event);
EventDispatcher::dispatch(eventPtr); //pseudocode
EventDispatcher
प्राप्त करता है एक EventPtr और इसे एक कतार में जोड़ता है जो किसी अन्य थ्रेड में संसाधित हो जाता है ... लेकिन प्रेषण विधि के लिए उपयुक्त विधि हस्ताक्षर क्या है?
dispatch(EventPtr event); //will push_back(event)
या
dispatch(const EventPtr& event); //will push_back(event);
ध्यान में रखते हुए मेरी EventDispatcher एक कतार है:
typedef std::queue<EventPtr> EventQueue
EventQueue theQueue;
फिर बाद में, अन्य धागा कुछ कार्रवाई करने के लिए करने के लिए कतार और इसे हाथों से बंद एक घटना पॉप घटना:
EventPtr event = theQueue.front();
EventProcessor::process(event); //pseudocode
theQueue.pop();
फिर, process
विधि के लिए उचित विधि हस्ताक्षर क्या है? मैं सोच रहा हूं कि क्या मैं प्रक्रिया विधि में नग्न Event*
पास कर सकता हूं?
मुझे लगता है कि मुझे आश्चर्य है कि मुझे केवल मूल्य से गुजरना है, इसलिए संदर्भ गणना सटीक है? मैं वास्तव में इस तथ्य के बारे में चिंतित हूं कि एक धागा कतार पर धक्का दे रहा है और दूसरा धागा कतार से बाहर निकल रहा है और मैं कहीं भी पॉइंटर्स को रिसाव नहीं कर रहा हूं ...
धन्यवाद!