2013-06-02 7 views
5

मैं बस Cprogramming.com पर यादृच्छिक पृष्ठों के माध्यम से जा रहा था और Constructors and Destructors ट्यूटोरियल/उदाहरण पृष्ठ पर ध्यान दिया। वे एक निर्माता को परिभाषित करने के निम्नलिखित विधि का इस्तेमाल किया है:इस कन्स्ट्रक्टर परिभाषा का लाभ क्या है

class String 
{ 
    private: 
     char *str; 
     int size; 
    public: 
     String() : str(NULL), size(0) { } // <- This statement 
     String(int size) : str(NULL), size(size) { // <- And this one 
      str = new char[size]; 
     } 
} 

मैं जादू this सूचक के साथ कंस्ट्रक्टर के अच्छे पुराने जमाने परिभाषा का उपयोग किया गया है:

String() { 
    this->str = NULL; 
    this->size = 0; 
} 
String(int size) { 
    this->size = size; 
    this->str = new char[size]; 
} 

कोई अतिरिक्त लाभ है स्पष्ट छोटे कोड (लाइनों की कम संख्या) के बगल में पहली घोषणा में?

पीएस: यह पिछले कुछ वर्षों से रहा है क्योंकि मैंने पिछली बार सी ++ में कुछ लिखा था।

+1

http://stackoverflow.com/questions/926752/why-should-i-prefer-to-use-member-initialization-list –

उत्तर

11

उन constructor initialization lists हैं, और मूल प्रकारों के लिए प्रपत्र आप के लिए उपयोग किया जाता है, जो काम बजाय आरंभीकरण पर आधारित है के संबंध में कोई अंतर नहीं है।

हालांकि, उपयोगकर्ता परिभाषित प्रकार के लिए वहाँ के बीच (और शायद अर्थ विज्ञान) प्रदर्शन के मामले में एक अंतर हो सकता है:

  1. डिफ़ॉल्ट-निर्माण एक वस्तु और तो इसे करने के लिए एक मूल्य बताए, और
  2. सीधे उस मान के साथ इसे प्रारंभ करना।

इसके अलावा, आप उन प्रकार है कि डिफ़ॉल्ट-constructible नहीं कर रहे हैं अन्य एक सदस्य प्रारंभ सूची का उपयोग कर उन्हें प्रारंभ करने से के लिए एक विकल्प नहीं है, और आप const के लिए एक विकल्प नहीं है और संदर्भ सदस्यों को या तो, कि जरूरी तुरंत शुरू किया जाना चाहिए। सी ++ में

0

निर्माण वस्तुओं तीन चरणों में किया जाता है:

  1. मेमोरी प्राप्त है
  2. सदस्य चर प्रारंभ कर रहे हैं
  3. निर्माता निष्पादित किया जाता है।

निर्माता परिभाषा String() : str(NULL), size(0) {} कदम 2.

निर्माता परिभाषा String() { this->str = NULL; this->size = 0; } चरण में इस करता है में चर के लिए उचित मूल्य प्रदान करती है 3. चरण 2 है, तथापि, फिर भी मार डाला। इसलिए सदस्य चर के लिए उचित मूल्य असाइन करने का यह तरीका कम कुशल है।

1

मैं आपके जैसा था, पुराने पुराने कोलाज ज्ञान के साथ यह उपयोग अजीब लगता है। लेकिन फिर समझें कि इस तकनीक का उपयोग करके, कस्टम क्लास कार्यान्वयन रनटाइम पर बेहतर प्रदर्शन देते हैं। और here सी ++ के पिता से आरंभिक सूचियों के बारे में एक लंबी व्याख्या है।

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