तरह से मैं इसे देख यह है कि अगर हम कुछ rvalue संदर्भ एक्स था:
T&& x = ...;
और हम एक पैरामीटर के रूप में एक्स का उपयोग कर कुछ काम कहा जाता है:
f(x)
हम किसी न किसी प्रकार की जरूरत च बताने के लिए चाहे वह एक्स को नुकसान पहुंचाए या नहीं (या "एक्स का स्वामित्व लेना" या "एक्स का उपयोग करने वाला अंतिम ग्राहक है")।
एक तरीका यह डिजाइन करने के लिए हर कॉल अर्हता प्राप्त करने के होगा:
f(yours_now(x)) // ok to damage
f(still_mine(x)) // dont damage
और अयोग्य कॉल अवैध हैं।
एक और तरीका है एक ही रास्ता डिफ़ॉल्ट बनाने के लिए होगा:
कोई एक:
f(yours_now(x)) // ok to damage
f(x) // dont damage
या
f(x) // ok to damage
f(still_mine(x)) // dont damage
तो अगर हम हर बार इस्तेमाल करने योग्यता सहमत है भी भारी और हम डिफ़ॉल्ट होना चाहिए एक तरफ, जो सबसे अच्छा है? खैर, दोनों मामलों में गलती से डिफ़ॉल्ट चुनने की लागत को देखते हैं:
पहले मामले में यह नुकसान ठीक था, लेकिन हमने गलती से कहा कि यह नहीं था। इस मामले में हम प्रदर्शन खो देते हैं क्योंकि एक अनावश्यक प्रतिलिपि बनाई गई थी, लेकिन इसके अलावा कोई बड़ा सौदा नहीं था।
दूसरे मामले में किसी ऑब्जेक्ट को नुकसान पहुंचाना ठीक नहीं था, लेकिन हमने गलती से कहा था कि यह था।इस कार्यक्रम में लॉजिकल बग का पता लगाना मुश्किल हो सकता है, क्योंकि एक्स अब क्षतिग्रस्त राज्य में एफ रिटर्न के रूप में है, लेकिन लेखक ने उम्मीद नहीं की है।
तो पहला मामला चुना गया था क्योंकि इसका "सुरक्षित" था।
स्रोत
2013-01-16 08:24:00