Wednesday, 15 June 2011

c++11 - unique_ptr assignment operator overload resolution -


unique_ptr का उपयोग std :: move semantics के साथ किया जाना चाहिए, और प्रतिलिपि असाइनमेंट ऑपरेटर स्पष्ट रूप से लावलुओं के लिए निकाल दिया गया था, ताकि कुछ भी

<पूर्व> अनन्य_प्रतिक & lt; int & gt; आर = अन्य_अंक_प्रतिक;

काम नहीं करेगा।

मुझे निम्नलिखित हस्ताक्षर मिले:

  unique_ptr & amp; ऑपरेटर = (अनन्य_प्रतिक & amp; amp; आर); (1) टेम्पलेट & lt; कक्षा यू, कक्षा ई & gt; unique_ptr & amp; ऑपरेटर = (अनन्य_प्रतिक & lt; U, E & gt; और amp; आर); (1) अनन्य_पीटआर & amp; ऑपरेटर = (nullptr_t); (2)  

समस्या, हालांकि, यह है कि

संशोधित rvalue संदर्भ, प्रकार & amp; amp;

उसी लेख में, अनुभाग

rvalue संदर्भ : अधिभार संकल्प

यह कहा गया है कि

· आरंभीकरण के नियमों में वीटो शक्ति है।

· लावल्यू दृढ़ता से lvalue संदर्भों, और rvalues दृढ़ता से संदर्भित करने के लिए बाध्यकारी पसंद करते हैं।

कोई नियम हस्ताक्षर में rvalue संदर्भ पैरामीटर के लिए बाइंड करने के लिए lvalue को रोकने के लिए नहीं जा रहा है। (यह सिर्फ "जोरदार पसंद" है, जब कोई बेहतर विकल्प नहीं है, तो लार्ले्यू अभिव्यक्ति, रैवल्यु फ़ंक्शन हस्ताक्षर से बद्ध हो जाएगी)

तो, स्टड :: ले जाने का क्या मतलब है, जो मूलतः लावल्यू अभिव्यक्ति को परिवर्तित करती है संदर्भ के लिए?

एक प्रयोग में, मैंने कोशिश की

  unique_ptr & lt; SomeType & gt; आर = अन्य_अंक_प्रतिक;  

त्रुटि संदेश दिलचस्प है, जो पुष्टि करता है कि मैंने जो ऊपर कहा था वह गलत है (लेकिन क्यों ???):

त्रुटि: हटाए गए फ़ंक्शन का उपयोग ' Std :: unique_ptr & lt; _Tp, _Dp> :: unique_ptr (const std :: unique_ptr & lt; _Tp, _Dp> & amp;) [_Tp = ITreeNode; _Dp = std :: default_delete>] '' टाइपेनाम आईटीआरआईएनडीई :: युनिकिप्रट्र पीटीआर = आरटीपीटी;

यह फ़ंक्शन के हस्ताक्षर को लावल्यू संदर्भ के साथ खोज रहा है। क्या दृश्य सीपीपी ब्लॉग ओवलोड रेज़ोल्यूशन के बारे में रूवेल्यू संदर्भ को लेकर गलत है? या यह इसलिए है क्योंकि मैं जी ++ 4.8.2 का उपयोग कर रहा हूं और इसका व्यवहार vc ++ कंपाइलर से अलग है? फिर कौन सा संकलक सही / इच्छित व्यवहार देता है?

कृपया मुझे उजागर करें!


No comments:

Post a Comment