तो, मैं हमेशा सी ++ पॉइंटर्स बनाम पर थोड़ा अस्पष्ट रहा हूं ... जो भी दूसरे को बुलाया जाता है। की तरह,स्टैक वैरिएबल लौट रहे हैं?
Object* pointer = new Object();
बनाम
Object notpointer();
मुझे पता है कि संकेत शायद दूसरा एक में शामिल हैं, लेकिन मूल रूप से यह एक नहीं के सूचक है। (क्या यह वास्तव में कहा जाता है?)
इसके अलावा, मैं, है ना मानना है कि पहले एक के लिए, आप कुछ बिंदु पर
delete pointer;
कॉल करने के लिए एक बार आप इसे पूरा कर चुके हैं है? और दूसरा जिसकी आपको चिंता करने की आवश्यकता नहीं है। मैंने पढ़ा है कि पहली बार ढेर पर आवंटित किया गया है, लेकिन दूसरा ढेर पर आवंटित किया गया है, और जब विधि वापस आती है तो चली जाती है।
हालांकि, जब आप किसी फ़ंक्शन से कुछ (मूल नहीं) लौट रहे हैं तो क्या होगा?
एक अच्छा उदाहरण Should I return std::strings? में लिखा है:
std::string linux_settings_provider::get_home_folder() {
return std::string(getenv("HOME"));
}
मैं पहले क्या लिखा है, स्ट्रिंग ढेर पर आवंटित किया जाता है, और मुक्त कर दिया जाना चाहिए द्वारा जब समारोह रिटर्न, है ना? फिर भी किसी ने इसके बारे में कुछ नहीं कहा, इसलिए मुझे लगता है कि यह ठीक काम करता है। क्यूं कर?
सामान्य तौर पर,
return new std::string("pointer");
और
return std::string("not-pointer");
के बीच अंतर क्या है?
साथ ही, दोनों कामों को मानते हुए, दोनों के पेशेवरों और विपक्ष क्या हैं?
दूसरा एक कार्य है। – chris
आप यहां कई अवधारणाओं को मिश्रित कर रहे हैं। एक सूचक केवल एक चर है जो स्मृति पता रख सकता है। 'नया std :: string' स्मृति आवंटन और ऑब्जेक्ट निर्माण कर रहा है। उन दो चीजों को एक साथ उपयोग करने की आवश्यकता नहीं है। आधुनिक सी ++ में, आप आमतौर पर ऐसा नहीं करते हैं। – greatwolf
स्ट्रिंग पर स्ट्रिंग आवंटित की जाती है। यह ** ** ** मुक्त नहीं है; यह नष्ट हो गया है लेकिन संकलक इसे नष्ट करने से पहले इसे कॉपी करता है। –