से लौटने वाली ऑब्जेक्ट मैं अब वास्तव में उलझन में हूं कि फ़ंक्शन से ऑब्जेक्ट को वापस करने के लिए किस प्रकार और किस विधि का उपयोग करना है। मुझे दी गई आवश्यकताओं के समाधान पर कुछ प्रतिक्रिया चाहिए।फ़ंक्शन
परिदृश्य ए: लौटाया गया ऑब्जेक्ट एक चर में संग्रहीत किया जाना चाहिए जिसे अपने जीवनकाल में संशोधित करने की आवश्यकता नहीं है।
someMethod() {
const Foo& l_Foo = someClassPInstance->GetFoo();
//...
}
Scneraio बी:: इस प्रकार,
const Foo SomeClass::GetFoo() {
return Foo();
}
के रूप में लागू किया लौटे वस्तु एक चर जो अपने जीवनकाल के दौरान संशोधित किया जाएगा में संग्रहित किया जा रहा है। इस प्रकार,
void SomeClass::GetFoo(Foo& a_Foo_ref) {
a_Foo_ref = Foo();
}
लागू के रूप में: कहते हैं कि चलो कि फू एक डिफ़ॉल्ट निर्माता नहीं कर सकते हैं:
someMethod() {
Foo l_Foo;
someClassPInstance->GetFoo(l_Foo);
//...
}
मैं यहाँ एक सवाल है। तो फिर तुम इस स्थिति में उस के साथ सौदा होगा, क्योंकि हम नहीं कर सकते अब और इस बारे में:
Foo l_Foo
परिदृश्य सी:
Foo SomeClass::GetFoo() {
return Foo();
}
लागू के रूप में:
someMethod() {
Foo l_Foo = someClassPInstance->GetFoo();
//...
}
मुझे लगता है कि यह अनुशंसित दृष्टिकोण नहीं है क्योंकि यह अतिरिक्त अस्थायी निर्माण करेगा।
आपको क्या लगता है? इसके अलावा, क्या आप इसके बजाय इसे संभालने का एक बेहतर तरीका सुझाते हैं?
http://en.wikipedia.org/wiki/Return_value_optimization – vladr
परिदृश्य ए ठीक है लेकिन वास्तव में सी में कोई सुधार नहीं है।मैं तब तक सी का उपयोग करता हूं जब तक फू का डिफॉल्ट कन्स्ट्रक्टर "तेज़" न हो, फू की प्रतिलिपि ctor "धीमी" है और आप अनावश्यक प्रतियों को दूर करने के लिए पर्याप्त स्मार्ट होने वाले संकलक पर भरोसा नहीं करना चाहते हैं, जिसमें बी बी भी स्वीकार्य है। – sellibitze
ध्यान दें कि 'a_Foo_ref = Foo();' ऑब्जेक्ट बनाता है और कॉपी करता है। यह पिछले परिदृश्य के समतुल्य है – Anycorn