कुछ लोगों को लगता है कि आप this
उपयोग नहीं करना चाहिए: (। व्युत्पन्न वर्गों 'कंस्ट्रक्टर्स उनके आधार वर्ग के उन लोगों के बाद कहा जाता है)
तो अंत में सबसे सुरक्षित बात शायद मैन्युअल धागा शुरू करने के लिए है एक कन्स्ट्रक्टर में पॉइंटर क्योंकि ऑब्जेक्ट अभी तक पूरी तरह से गठित नहीं हुआ है। हालांकि यदि आप सावधान हैं तो आप इसे कन्स्ट्रक्टर ({body} में और यहां तक कि प्रारंभिक सूची में भी) में उपयोग कर सकते हैं।
यहां कुछ ऐसा है जो हमेशा काम करता है: {body}
एक कन्स्ट्रक्टर (या कन्स्ट्रक्टर से बुलाया गया फ़ंक्शन) बेस क्लास में घोषित डेटा सदस्यों और/या कन्स्ट्रक्टर की अपनी कक्षा में घोषित डेटा सदस्यों को विश्वसनीय रूप से एक्सेस कर सकता है। ऐसा इसलिए है क्योंकि उन सभी डेटा सदस्यों को कन्स्ट्रक्टर के {बॉडी} निष्पादन शुरू होने के समय पूरी तरह से निर्मित होने की गारंटी है।
यहां कुछ ऐसा काम नहीं करता है जो कभी भी काम नहीं करता है: कन्स्ट्रक्टर का {body} (या कन्स्ट्रक्टर से बुलाया गया फ़ंक्शन) व्युत्पन्न कक्षा में ओवरराइड किए गए वर्चुअलमेम्बर फ़ंक्शन को कॉल करके व्युत्पन्न कक्षा में नहीं जा सकता है।यदि आपका लक्ष्य व्युत्पन्न वर्ग में ओवरराइड फ़ंक्शन पर जाना था, तो आपको वह नहीं मिलेगा जो आप चाहते हैं। ध्यान दें कि आप व्युत्पन्न वर्ग है आप कैसे आभासी सदस्य फ़ंक्शन को कॉल की स्वतंत्र में ओवरराइड करने के लिए नहीं मिलेगा: स्पष्ट रूप से इस सूचक का उपयोग कर (जैसे, इस-> विधि()), परोक्ष इस सूचक (जैसे, विधि (का उपयोग करते हुए)), या यहां तक कि किसी अन्य फ़ंक्शन को कॉल करना जो आपके ऑब्जेक्ट पर वर्चुअल सदस्य फ़ंक्शन को कॉल करता है। लब्बोलुआब यह है: भले ही फोन करने वाले आधार वर्ग के निर्माता के दौरान, एक व्युत्पन्न वर्ग की एक वस्तु निर्माण कर रही है, अपने उद्देश्य यह है कि व्युत्पन्न वर्ग की अभी तक नहीं है। आपको चेतावनी दी गई है। यदि आप किसी अन्य डेटा के सदस्य के प्रारंभकर्ता को यह वस्तु में डेटा के किसी सदस्य गुजरती हैं, आप यह सुनिश्चित करें कि अन्य डेटा सदस्य पहले से ही शुरू कर दिया गया बनाना चाहिए:
यहाँ कुछ है कि कभी कभी काम करता है। अच्छी खबर यह है कि आप यह निर्धारित कर सकते हैं कि अन्य डेटा सदस्य ने आपके द्वारा उपयोग किए जा रहे विशेष कंपाइलर से स्वतंत्र कुछ सरल भाषा नियमों का उपयोग करके प्रारंभ किया है (या नहीं)। बुरी खबर यह उन भाषा नियमों को जानना है कि आप (जैसे, आधार वर्ग उप वस्तुओं पहले प्रारंभ किया है (क्रम को देखने यदि आप कई और/या आभासी विरासत है!), तो कक्षा में परिभाषित डेटा सदस्यों में प्रारंभ कर रहे हैं जिस क्रम में वे कक्षा घोषणा में शामिल होते हैं)। यदि आप इन नियमों को नहीं जानते हैं, तो किसी भी अन्य डेटा के सदस्य के प्रारंभकर्ता करने के लिए (या नहीं, आप स्पष्ट रूप से thiskeyword का उपयोग की परवाह किए बिना) इस वस्तु से कोई डेटा सदस्य पारित नहीं है! और यदि आप नियमों को जानते हैं, तो कृपया सावधान रहें।
@ गिल्बर्टक: यदि बी ए से निकला है, भले ही आप ए के कन्स्ट्रक्टर के अंत में धागा लॉन्च करते हैं, बी (vtable, सदस्य चर, कन्स्ट्रक्टर कोड) से सबकुछ प्रारंभ/निष्पादित नहीं किया जाएगा। क्या यह एक बुरा संयोग बग हो सकता है? पहली नज़र में, मैं हाँ कहूंगा, क्योंकि वस्तु निर्माण धागे में बदल जाएगी, जबकि इसे नव निर्मित धागे में इस्तेमाल किया जा सकता है। जो यह वैसे भी ऐसा नहीं करना चाहिए - – paercebal