मैं निम्नलिखित सदस्य समारोह है:वापसी मान के लिए प्रतिलिपि निर्माता होता है जब
Person ClassB::DoSomethingAndReturnPerson()
{
RAIIMutex myLock(&m_mutex);
return m_person;
}
RAIIMutex
एक सहायक वर्ग है कि एक म्युटेक्स प्राप्त करता है और निर्माता और नाशक में विज्ञप्ति में यह ताले है।
m_person
Person
(आकार में बहुत छोटा) है। अन्य धागे में अन्य कार्य इस सदस्य को बदल सकते हैं।
मैं मान द्वारा m_person
वापस जाने के लिए चाहते हैं (एक प्रति वापसी) और निश्चित रूप से मैं स्थिति है जहाँ m_person
एक और धागा में बदला जा रहा है जबकि यह बदले में कॉपी किया जा रहा है तो मैं ताला जोड़ दिया है बचना चाहते हैं।
लेकिन पहले क्या होता है? क्या संकलक पहले m_person
की एक प्रति बनाता है या पहले myLock
के विनाशक को कॉल करता है?
सैद्धांतिक रूप से यह easly कुछ इस तरह करने से व्याख्या करने योग्य:
Person ClassB::DoSomethingAndReturnPerson()
{
RAIIMutex myLock(&m_mutex);
Person tmp = m_person;
return tmp;
}
लेकिन मैं अपने सवाल का जवाब जानने में दिलचस्पी रहा हूँ।
धन्यवाद
[OT] आप 'साथ [' std :: lock_gurad'] (http://en.cppreference.com/w/cpp/thread/lock_guard) – NathanOliver
प्रतिलिपि निर्माता नहीं कहा जा सकता है RAIIMutex' जगह ले सकता है बिलकुल भी, [कॉपी elision] के कारण (https://en.wikipedia.org/wiki/Copy_elision)। –
@ जोचिमपिलबोर्ग यह संदिग्ध है क्योंकि 'm_person' एक वर्ग सदस्य परिवर्तनीय प्रतीत होता है। – NathanOliver