2010-06-10 18 views
12

कहते हैं कि एक आधार वर्ग सूचक है जो एक आधार वर्ग वस्तु की ओर इशारा करते है है की सुविधा देता है?सी ++ साक्षात्कार प्रश्न से जुड़े वर्ग संकेत

+2

क्या आपके पास सिर्फ यह या कक्षाओं की घोषणा थी? – Nikko

+8

मैं एक असंगत नामकरण योजना के साथ जाने जा रहा हूं। यदि आपके पास 'बेसक्लास' तार्किक रूप से है तो आपके पास 'derivedclass' भी होगा। इसके अलावा, दूरी सभी प्रकार के गलत है। * हर कोई * जानता है कि क्षैतिज प्रकार के साथ संबंधित है, चर नहीं। –

+4

@ डेनिस तार्किक रूप से तारांकन प्रकार से संबंधित है लेकिन वाक्य रचनात्मक रूप से यह चर से संबंधित है। इसे आज़माएं और मुझे बताएं कि क्या पीआरटी 2 एक सूचक है या नहीं: 'MyClass * ptr1, ptr2; '। –

उत्तर

16

स्पष्ट उत्तर यह है कि आप मूल बेस क्लास ऑब्जेक्ट लीक कर रहे हैं।

+0

यह मेरा जवाब था ... वास्तव में .. लेकिन उसने मुझे किसी अन्य समस्या का संकेत दिया जिसे मैं समझ सकता था। – Vijay

+0

कोई अन्य समस्या नहीं है। – Blindy

+0

एक बात यह हो सकती है कि व्युत्पन्न वास्तव में आधार से प्राप्त किया जाना चाहिए। – ckv

0

आप पिछले ऑब्जेक्ट के लिए आवंटित स्मृति को जारी किये बिना पॉइंटर को पुन: असाइन कर रहे हैं। इसका परिणाम स्मृति रिसाव हो सकता है, अगर किसी अन्य निकाय ने इसे पुन: असाइन करने से पहले bptr के मान को संग्रहीत नहीं किया है।

1

पहली पंक्ति में, आपने एक सूचक घोषित किया। दूसरी पंक्ति में, आप इसे स्मृति में संदर्भ देते हैं। लाइन 3 में , आप स्मृति में आईटी को एक और संदर्भ देते हैं।

पॉइंटर को दिया गया पहला संदर्भ लीक हो गया है ... आप इसे कभी वापस नहीं प्राप्त कर सकते हैं।

0

क्या baseclass एक आभासी विनाशक है? यदि नहीं, तो यह भी बुरा हो सकता है (स्पष्ट रिसाव के अतिरिक्त)।

7

स्पष्ट स्मृति के अलावा रिसाव यह baseclass और derived की परिभाषा समस्याओं में से कुछ हो सकता है पर निर्भर करता है:

  1. derived सार्वजनिक रूप से baseclass से प्राप्त नहीं है (यदि ऐसा है तो यह एक भयानक सवाल एक में पूछने के लिए है साक्षात्कार)
  2. baseclass एक आभासी नाशक (जिस स्थिति में यह delete bptr; के लिए असुरक्षित है) नहीं है
1

था वह करने की कोशिश कर Circle Ellipse problem पर जाएं? यदि व्युत्पन्न बेसक्लास का विशेषज्ञता है बेसक्लास पर कुछ सार्वजनिक तरीकों का अर्थ अब नहीं हो सकता है उदा। यदि सर्कल को एलीप्स से निकाला जाता है और एलीपसे में खिंचाव() होता है जो एक धुरी में अंडाकार फैलाता है, तो सर्किल के उदाहरण पर विधि कहने पर आप क्या करते हैं?

0

एकमात्र समस्या तब होती है जब वर्ग विनाशक को वर्चुअल के रूप में परिभाषित नहीं किया जाता है। इस परिदृश्य में, यह स्मृति रिसाव

0

वहाँ कोई वाक्य रचना समस्या है, लेकिन आप एक नया मान "bptr" चर बताए द्वारा "baseclass" उदाहरण के पते खो रहे हैं कारण होगा। इसका परिणाम स्मृति रिसाव में होता है, क्योंकि पहली instanciated कक्षा का पता खो जाता है।

5

अगर मैं तुम्हें थे मैं वापस कर देते हैं और सवालों का अपने साक्षात्कारकर्ता जोड़ी पूछना होगा:

  1. आप यकीन है कि यह केवल कोड उपलब्ध टुकड़ा है और उस मामले में मेरा उत्तर में सही अनुमान लगाने, और अधिक कुछ भी नहीं है कर रहे हैं।
  2. क्या बेसक्लास के लिए मेमोरी एमजीएमटी योजना का कुछ प्रकार है और व्युत्पन्न है? उस स्थिति में हमें ऑपरेटर की नई परिभाषाओं को देखने की ज़रूरत है जो प्रदान नहीं की जाती है।
  3. यदि कोई मेमोरी mgmt नहीं है, तो बेसक्लास या व्युत्पन्न स्मार्ट पॉइंटर प्रकार हैं जो संदर्भ गणना करते हैं? उन मामलों में कोई रिसाव नहीं है।
  4. यदि कोई स्मार्ट प्रकार नहीं है, तो निश्चित रूप से यह एक स्मृति रिसाव की तरह दिखता है।

और कृपया, वर्चुअल विनाशक इत्यादि केवल तभी आते हैं जब आपके पास कक्षा परिभाषाएं हों। शायद साक्षात्कारकर्ता गुप्त रूप से आकर्षक प्रकार की तलाश में है।

अर्पण

+0

+1, कभी-कभी प्रश्न भी उत्तर हो सकते हैं .. :) – liaK

2

कि समस्या क्या यहाँ है?

("एक स्मृति रिसाव") का जवाब स्वीकार नहीं किया है, तो समस्या न तो प्रश्न साक्षात्कारकर्ता है;)

0

मैं तो जैसे इस साक्षात्कार सवाल का जवाब चाहते हैं:

सीमित कोड स्निपेट से प्रदान किया गया है कि यह स्पष्ट है कि जब हम इस व्युत्पन्न वर्ग के उदाहरण के लिए पॉइंटर असाइन करते हैं तो स्मृति मेमोरी तब लागू होगी, क्योंकि हमारे पास मूल ऑब्जेक्ट तक पहुंचने वाले कोई अन्य पॉइंटर्स नहीं हैं। हालांकि, दोनों वर्गों की परिभाषाओं को देखे बिना, और दो वर्गों के बीच संबंधों को देखे बिना कोड स्निपेट के बारे में और कहना असंभव है।

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