मेरे कार्यक्रम में मेरे पास एक एसटीएल सेट है।सी ++ में कंटेनर में संदर्भ (पॉइंटर्स नहीं) क्यों संग्रहीत करते हैं?
set<string> myStrings;
मेरे कोड की दक्षता में सुधार करने के लिए मैंने इसे केवल पॉइंटर्स को पकड़ने के लिए बदल दिया। (मैं संग्रहीत करने के लिए वास्तविक स्ट्रिंग प्रतियां जरूरत नहीं है।)
set<string*> myStrings;
मैंने पढ़ लिया है यह संदर्भ के साथ संकेत दिए गए विकल्प जब संभव हो एक अच्छा अभ्यास है कि। (बेशक, एक सूचक की वास्तविक कार्यक्षमता की जरूरत ही अगर नहीं है।)
set<string&> myStrings;
बाद भी मुझे, संकलक त्रुटियों की एक बहुत कुछ देता है, हालांकि। कंटेनर तत्वों के रूप में संदर्भों का उपयोग करना क्यों संभव नहीं है?
'shared_ptr' जैसे स्मार्ट पॉइंटर का उपयोग करने पर विचार करें (या, यदि आपका कार्यान्वयन रैल्यू संदर्भों का समर्थन करता है, तो 'unique_ptr', हालांकि आपकी समस्या का विवरण यह ऐसा नहीं लगता है कि आप जो खोज रहे हैं)। –
एक तरफ: आईएमएचओ, "संभव होने पर संदर्भों के साथ प्रतिस्थापन पॉइंटर्स" आमतौर पर समय की बर्बादी है, क्योंकि वे इतने सीमित हैं, और अनिवार्य रूप से आपको उन सभी को स्वैप करने के लिए नेतृत्व करेंगे जब आप बाद में महसूस करेंगे कि आपको उनकी आवश्यकता है नल, या फिर से सीट, या जो कुछ भी। संदर्भों की वास्तव में आवश्यकता का एकमात्र कारण यह है कि कुछ ऑपरेटर ओवरलोड को वाक्य रचनात्मक रूप से सुखद लगाना है। –
आपको क्या लगता है कि स्ट्रिंग्स के बजाए स्ट्रिंग्स पॉइंटर्स स्ट्रिंग्स के बजाए इसे अधिक कुशल बनाते हैं। आधुनिक तारों में एक बहुत ही कुशल प्रतिलिपि तंत्र है, इसलिए यह संभावना नहीं है कि आपको जो लाभ मिलेगा वह महत्वपूर्ण होगा और कोड में जो अतिरिक्त जटिलता शामिल होगी वह लाभ के लायक नहीं होगी। –