c++ - Why doesn't this C++0x code call the move constructor? -
किसी कारण से, निम्न कोड कभी नहीं कॉल करता है Event :: Event (Event & amp; e)
ईवेंट ए; इवेंट बी; इवेंट अस्थायी; अस्थायी = चाल (ए); ए = चाल (बी); बी = चाल (अस्थायी);
क्यों नहीं?
का प्रयोग कर std :: swap
इसे एक बार कॉल करता है।
वर्ग इवेंट { सार्वजनिक: इवेंट (): मायटाइम (0.0), मायनोद (नल) {} इवेंट (प्रीपेरल टी, नोड * एन); इवेंट (ईवेंट और amp; अन्य); इवेंट (ईवेंट कॉन्स्ट और अन्य) = हटाएं; ~ घटना (); बूल ऑपरेटर & lt; (इवेंट कॉन्स्ट और अन्य) कंस्ट्रक्शन {myTime & lt; other.myTime; } बूल ऑपरेटर & gt; (इवेंट कॉन्स्ट एंड अन्य) कंस्ट्रक्ट {myTime & gt; other.myTime; } प्रिप्रेट मिलते समय () const {myTime; } शून्य सेट टाइम (पिछला बार) {myTime = समय; } नोड * getNode () const {वापसी myNode; } निजी: फ़ेरल मायटाइम; नोड * myNode; };
आपके कोड में दो संभावित स्थान हैं जहां से एक को चालक कंसट्रक्टर को कॉल करने की उम्मीद हो सकती है (लेकिन यह नहीं है):
1) कॉलिंग std :: move
2) असाइनमेंट के दौरान। 1 के संबंध में) 1), std :: चाल एक सरल डाली करता है - यह प्रतिलिपि से कोई वस्तु नहीं बनाता है - अगर ऐसा होता है तो चालक द्वारा इसे लागू किया जा सकता है, लेकिन उसके बाद से क्या एक सरल रेवल्यू डाली जाती है जिसे इसे लागू नहीं किया जाता है Std :: की परिभाषा static_cast के समान है। 2 के संबंध में), आरंभ और असाइनमेंट दो पूरी तरह से भिन्न संचालन हैं (यहां तक कि हालांकि कुछ रूपों का आरंभीकरण '=' प्रतीक का उपयोग करता है)। आपका कोड असाइन करता है और इसलिए डिफ़ॉल्ट असाइनमेंट ऑपरेटर का उपयोग करता है जिसे कॉन्स्ट लावल्यू संदर्भ को स्वीकार करने के लिए घोषित किया गया है। चूंकि आप किसी ईवेंट ऑब्जेक्ट को दूसरे के साथ कभी भी प्रारंभ नहीं करते हैं, इसलिए आप नहीं देखेंगे कि आपका चालन निर्माता आता है। यदि आपने एक चाल असाइनमेंट ऑपरेटर घोषित किया है: ईवेंट & amp; ऑपरेटर = (इवेंट एंड amp; अन्य)
, तब आपका वर्तमान कोड इसे आमंत्रित करेगा या यदि आपने लिखा है: ईवेंट ए; इवेंट टीएमपी = चाल (ए);
लिखित रूप में आपका चालन कंसक्टर, आवेगा जाता है।
Comments
Post a Comment