मुझे पता है कि शीर्षक कुछ परिचित हैं जैसे कि कई समान प्रश्न हैं, लेकिन मैं समस्या के एक अलग पहलू के लिए कह रहा हूं (मुझे पता है कि स्टैक पर चीजें होने और उन्हें ढेर पर रखने के बीच का अंतर पता है)।
जावा में मैं हमेशा "स्थानीय" वस्तुओं के संदर्भ वापस कर सकता हूं
public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;
}
C ++ में, समान कार्य करने के लिए मेरे पास 2 विकल्प हैं
(1) जब भी मुझे किसी वस्तु को "वापस" करने की आवश्यकता हो तो मैं संदर्भों का उपयोग कर सकता हूं
void calculateThing(Thing& thing) {
// do calculations and modify thing
}
फिर इसे इस तरह इस्तेमाल करें
Thing thing;
calculateThing(thing);
(2) या मैं एक डायनामिक रूप से आवंटित ऑब्जेक्ट के लिए एक पॉइंटर वापस कर सकता हूं
Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;
}
फिर इसे इस तरह इस्तेमाल करें
Thing* thing = calculateThing();
delete thing;
पहले दृष्टिकोण का उपयोग करके मुझे मेमोरी को मैन्युअल रूप से मुक्त नहीं करना होगा, लेकिन मेरे लिए यह कोड को पढ़ना मुश्किल बनाता है। दूसरे दृष्टिकोण के साथ समस्या है, मुझे याद रखना होगा delete thing;
, जो कि बहुत अच्छा नहीं लगता है। मैं एक कॉपी किया गया मान वापस नहीं करना चाहता क्योंकि यह अक्षम है (मुझे लगता है), इसलिए यहां प्रश्न आते हैं
- क्या कोई तीसरा समाधान है (जिसमें मूल्य की प्रतिलिपि बनाने की आवश्यकता नहीं है)?
- क्या कोई समस्या है अगर मैं पहले समाधान के लिए छड़ी?
- मुझे दूसरे समाधान का उपयोग कब और क्यों करना चाहिए?