2008-11-02 9 views
8

सी ++ में, क्या संदर्भ के माध्यम से दायरा बढ़ाने के लिए सुरक्षित है?सी ++ में, क्या संदर्भ के माध्यम से दायरा बढ़ाने के लिए सुरक्षित है?

कोड में, मैं क्या मतलब है:

MyCLass& function badIdea() 
{ 
    MyClass obj1; 
    ... 
    return obj1; 
} 

उत्तर

20

संदर्भ के माध्यम से दायरे को विस्तारित करना सुरक्षित नहीं है। सी ++ में ऑब्जेक्ट्स को संदर्भित नहीं किया जाता है जब obj1 गुंजाइश से बाहर हो जाता है, इसे हटा दिया जाएगा, badIdea() के परिणाम को प्रतिबिंबित करने से आपको केवल

+0

फिर से बाध्य नहीं किया जा सकता है प्रश्न सी ++ और संदर्भ बाध्यकारी के बारे में था। संदर्भ गिनती इसमें प्रवेश नहीं करती है। मैंने अपना खुद का जवाब जोड़ा है, लेकिन संक्षेप में, आप * बाध्यकारी संदर्भ द्वारा किसी ऑब्जेक्ट का दायरा बढ़ा सकते हैं लेकिन आपके डिज़ाइन में सावधान रहना चाहिए। अगर आप इसे समझ में नहीं आते हैं तो ऐसा मत करो। –

+0

मुझे लगता है कि उन्होंने संदर्भ गिनती को संदर्भित किया है, इस प्रकार से आप उन भाषाओं में गुंजाइश से बाहर स्थानीय वस्तु के बिना एक संदर्भ वापस कर सकते हैं जो संदर्भ गणना (सी ++ उनमें से एक नहीं है) का समर्थन करता है। –

+0

मैं देख सकता हूं कि "संदर्भ गिनती" शब्द कैसे मुद्दों को हल करता है, मैं उन तंत्रों को संकेत देने की कोशिश कर रहा था जो अन्य भाषाओं में आवंटित वस्तुओं को जीवित रख सकते हैं, शायद एक अच्छा विचार नहीं –

0

कृपया यह स्पष्ट तुम्हारा क्या मतलब है।

आप मान लिया जाये कि ऐसा करने का इरादा:

int * p = NULL; 
{ 
    int y = 22; 
    p = &y; 
} 
*p = 77; // BOOM! 

तो नहीं, बिल्कुल नहीं, गुंजाइश एक संदर्भ होने के लिए बढ़ा दी प्राप्त करता है।

आप स्मार्ट पॉइंटर्स को देखना चाहते हैं, उदा। बूस्ट लाइब्रेरीज़ से: clickety

+0

मेरा मतलब संदर्भ था, पॉइंटर्स –

+1

संदर्भ पॉइंटर्स के समान ही कार्य करते हैं, केवल उन्हें – peterchen

14

एक संदर्भ के साथ एक दायरा बढ़ाने के लिए ठीक है namespace या फ़ंक्शन स्कोप (क्लास सदस्यों के साथ नहीं) में संदर्भ।

const int & cir = 1+1; // OK to use cir = 2 after this line 

यह चाल आदेश ठोस गुंजाइश गार्ड का एक आधार वर्ग के लिए एक const संदर्भ पर कब्जा करने में Andrei Alexandrescu's बहुत शांत scope guard में प्रयोग किया जाता है।

+0

ध्यान दें कि यह केवल "दायरे को विस्तारित करना" है समझें कि एक अस्थायी के आमतौर पर बहुत संकीर्ण "दायरा" माता-पिता के दायरे में बढ़ाया जाता है, जो कि ओपी पूछ रहा था उससे काफी अलग है। C++ के छोटे ज्ञात पहलू का जिक्र करने के लिए कुडोस कि बहुत से लोग पहले से उलझन में हैं। – philsquared

संबंधित मुद्दे

 संबंधित मुद्दे