पारंपरिक सी ++ में, कार्यों और विधियों में मूल्य से गुजरना बड़ी वस्तुओं के लिए धीमा होता है, और आम तौर पर पर फेंक दिया जाता है। इसके बजाय, C ++ प्रोग्रामर आसपास के संदर्भों को पास करते हैं, जो तेज है, लेकिन जो स्वामित्व के चारों ओर और विशेष रूप से स्मृति प्रबंधन के आसपास सभी प्रकार के जटिल प्रश्नों का परिचय देता है (इस घटना में कि वस्तु ढेर-आवंटित है)
अब, C ++ 11 में, हमारे पास रेवल्यू रेफरेंस और मूव कंस्ट्रक्टर्स हैं, जिसका अर्थ है कि किसी बड़े ऑब्जेक्ट (जैसे std::vector
) को लागू करना संभव है, जो किसी फ़ंक्शन के मान से और उसके बाहर जाने के लिए सस्ता है।
तो, क्या इसका मतलब यह है कि डिफ़ॉल्ट को इस तरह के std::vector
और जैसे उदाहरणों के लिए मूल्य से गुजरना चाहिए std::string
? कस्टम ऑब्जेक्ट्स के बारे में क्या? नया सबसे अच्छा अभ्यास क्या है?
const std::string&
कॉपी के रूप में नहीं लिया । पहला धागा फिर बाहर निकल गया ...
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
। मुझे समझ में नहीं आता कि यह स्वामित्व के लिए जटिल या समस्याग्रस्त कैसे है? क्या मुझे कुछ याद आ सकता है?