जब मैं सी ++ की बात करता हूं तो मैं बहुत नाराज हूं, ऑब्जेक्ट लौटने का बेहतर तरीका क्या है? मैं स्क्रिप्टिंग दुनिया से आ रहा हूं जहां ऑब्जेक्ट्स हमेशा संदर्भ होते हैं, और मैं एक ही धारणा को प्राप्त करने की कोशिश कर रहा हूं ... मैं When to pass by reference and when to pass by pointer in C++? से इसे बंद कर रहा हूं, जहां एक उपयोगकर्ता ने कहा: "अंगूठे का एक अच्छा नियम:" संदर्भों का उपयोग करें जब आप "।" कर सकते हैं तो आप कर सकते हैं और पॉइंटर्ससी ++ में किसी ऑब्जेक्ट को वापस करने का सबसे अच्छा तरीका?
Channel channel = layer.getChannel(); // creates a copy BAD
जब यह होना चाहिए::
Channel &channel = layer.getChannel(); // reference good
वहाँ की एक फोन करने वाले को लागू करने का कोई तरीका है
// basic layer class
class Layer { private: Channel channel; // NEVER NULL };
// return object by pointer
Channel *Layer::getChannel() {
return &channel;
};
// return by reference
Channel& Layer::getChannel() {
return channel;
};
दूसरे संस्करण के साथ समस्या यह है कि संकलक इस लाइन स्वीकार करेगा दूसरा विकल्प बनाने के लिए इसे मजबूर करने का दूसरा विकल्प, या फिर पहला विकल्प बेहतर है, भले ही यह कभी भी न हो?
"मैं पटकथा दुनिया में जहां वस्तुओं हमेशा संदर्भ हैं से आ रहा हूँ, और एक ही धारणा हासिल करने की कोशिश कर रहा हूँ" क्यों आप के आसपास सी ++ में संदर्भ के रूप में सब कुछ पारित करने के लिए कोशिश कर रहे हैं? सी ++ में ऐसा करना स्वाभाविक नहीं है। आपके द्वारा उद्धृत "अंगूठे का नियम" शायद बेहतर होगा "जहां भी संभव हो मूल्यों (और प्रतियां) का उपयोग करें, अन्यथा संदर्भों का उपयोग करें, और केवल अंतिम उपाय उपयोग पॉइंटर्स के रूप में।" –
अपनी पृष्ठभूमि को ध्यान में रखते हुए, मैं दृढ़ता से सुझाव दूंगा कि आप ** स्मार्ट पॉइंटर्स ** के बारे में जानेंगे ताकि आपको ढेर-आवंटित वस्तुओं के लिए स्वचालित मेमोरी प्रबंधन मिल सके। –