2010-11-27 24 views
8

संभव डुप्लिकेट:
Benefits of Initialization listsप्रारंभकर्ता सूची का उपयोग करने के लाभ?

मैं अगर वहाँ निर्माता में इन डाल से अधिक प्रारंभकर्ता सूची के साथ सदस्यों को प्रारंभ करने के लिए एक लाभ यह था सोच रहा था। कुछ चीजों को प्रारंभिक सूची का उपयोग करना पड़ता है लेकिन अधिकांश चीजों के लिए, क्या कोई अंतर नहीं है? मैं बाद वाले को पसंद करता हूं क्योंकि जब मेरे पास एकाधिक रचनाकार होते हैं, तो मैं कोड पुन: उपयोग को बढ़ावा देने के लिए केवल निर्माण() को कॉल करना पसंद करता हूं।

धन्यवाद

उत्तर

12

निर्माण करने के लिए आप प्रारंभकर्ता सूची उपयोग नहीं करते हैं महंगे हैं, सदस्य या आधार वर्ग डिफ़ॉल्ट खोलने घुंघराले ब्रेस से पहले का निर्माण हो जाता है।

तो, अपने कॉल इसे बाद में स्थापित करने के लिए एक operator=() कॉल जोड़ देगा।

आप प्रारंभकर्ता सूची का उपयोग करते हैं, के किसी सदस्य या आधार वर्ग उचित निर्माता कहा जाता है।

अपनी कक्षाओं के आधार पर, यह आवश्यक या तेज़ हो सकता है।

+0

यदि आप नमूना उदाहरण प्रदान कर सकते हैं तो यह सहायक होगा। –

10

पुरातन के लिए, प्रारंभकर्ता सूची का उपयोग करने या काम के माध्यम से उन्हें निर्माण के बीच कोई अंतर नहीं है।

अन्य प्रकारों के लिए, ऑब्जेक्ट्स बनाने के दौरान प्रारंभिक सूचियां आपको प्रदर्शन सुधार दे सकती हैं।

ध्यान दें कि (प्रारंभकर्ता सूचियों में) आरंभ के आदेश कक्षा में घोषणा के आदेश पर निर्भर करता है है। यदि घोषणाएं आदेश से बाहर हैं और आपको डेटा बनाने की आवश्यकता है जो पहले से ही पहले से शुरू की जा रही किसी अन्य चीज पर निर्भर करता है, तो 'संभावित नियमों के प्रारंभिक सूचियों का उपयोग' का अपवाद है।

और जानकारी: http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.6

+0

उत्कृष्ट उत्तर। एक बिंदु जो मैं जोड़ना चाहता हूं ... यह समझदार हो सकता है (आपके पास रचनाकारों की संख्या के आधार पर) कन्स्ट्रक्टर का हिस्सा डालने के लिए जो प्राइवेट इन प्राइवेट्स को प्राइवेट इनिट() फ़ंक्शन में निर्दिष्ट करता है।यह प्रारंभकर्ता सूचियों में कोड डुप्लिकेशन को रोकता है। –

+0

@birryree तर्कों के अनुक्रम के बारे में अच्छा बिंदु आप गैर-प्राइमेटिव प्रकार के मामले में प्रारंभकर्ता सूची का उपयोग करने के फायदों पर विस्तार से बता सकते हैं। –

1

अन्य स्थिरांक और संदर्भ के लिए एक प्रारंभकर्ता सूची का उपयोग करने के लिए मजबूर किया जा रहा से, यह भी उपयोगी है क्योंकि यह आप के साथ सदस्य वस्तुओं का निर्माण डिफ़ॉल्ट से बचने के निर्माता दर्ज किया गया है और फिर तुरंत यह बताए, इससे पहले कि जो अक्षम हो सकता है अगर सदस्य वस्तुओं

2

अन्य सभी के अलावा जो कुछ भी उल्लेख किया गया है, इसके अलावा, यह छाया चर के असंबद्धता की अनुमति देता है, इसलिए this->var = var लिखना होगा, इसके बजाय आप myclass(int var) : var(var) कर सकते हैं। बेशक कुछ लोगों को यह बहुत भ्रमित/पढ़ना मुश्किल हो सकता है यदि आपके पास एक बड़ा कन्स्ट्रक्टर

2

भी प्रारंभिक सूचियों में अप्रबंधित संसाधन अधिग्रहण नहीं करता है। दूसरे शब्दों में, या तो "संसाधन अधिग्रहण प्रारंभिकरण" (इस प्रकार पूरी तरह से अप्रबंधित संसाधनों से परहेज करते हैं) का उपयोग करें या अन्यथा निर्माता निकाय में संसाधन अधिग्रहण करें।

और चेतावनी # 2 प्रत्येक संसाधन आवंटन (उदा।, नया) अपने कोड स्टेटमेंट में करें जो तुरंत प्रबंधक ऑब्जेक्ट (उदा।, Auto_ptr) को नया संसाधन देता है।

http://www.gotw.ca/gotw/056.htm

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