सी ++ मध्ये घोषणे नोड * टेम्प आणि नोड * टेम्प = नवीन नोडमध्ये काय फरक आहे जिथे नोड एक रचना आहे ज्यात 2 घटक डेटा आणि पुढील आहे?


उत्तर 1:

मी गृहित धरेन की ही दोन्ही घोषणा स्थानिक किंवा स्थिर व्हेरिएबल्ससाठी आहेत. प्रथम केवळ "टेम्प" नावाचे व्हेरिएबल घोषित करते ज्याचा प्रकार "पॉईंटर टू नोड" आहे परंतु तो प्रारंभ करीत नाही. दुसरा समान व्हेरिएबल घोषित करतो परंतु तो ढीगावर वाटप केलेल्या नोड स्ट्रक्चरच्या पॉईंटरसह प्रारंभ करतो.

व्हेरिएबल्सना त्यांना विनाविलंब न ठेवता प्रारंभ करणे नेहमीच श्रेयस्कर आहे. आपण कोडमध्ये कोठेही व्हेरिएबल सेट करणार असताना, डिबगिंग (नोड * टेम्प = नलप्टर) मध्ये डिबग करणे अधिक सुलभ केल्याने सामान्यत: त्यास किमान घोषित करणे रद्द करणे चांगले.


उत्तर 2:

नोड * टेम्प; नोड करण्यासाठी आरंभिक पॉईंटर बनवते. भविष्यात कदाचित आपण त्यास नोडचा पत्ता लागू कराल. ते नोड आधीपासूनच अस्तित्वात असावे. आपण नोड न गळता पॉइंटरला व्याप्तीबाहेर जाऊ देऊ शकता, कारण ते पॉइंटरपेक्षा वेगळे अस्तित्वात आहे.

नोड * टेम्प = नवीन नोड; साठी मेमरी वाटप करते आणि नवीन नोड ऑब्जेक्ट प्रारंभ करण्यासाठी कन्स्ट्रक्टरला कॉल करते. त्या नोडचा एकच संदर्भ पॉईंटर आहे. जर पॉईंटर स्कोपच्या बाहेर गेला तर नोड गळत जाईल, ते अद्याप अस्तित्त्वात आहे, तरीही स्मृती व्यापली आहे, परंतु ते कोणत्याही प्रकारे प्रवेशयोग्य नाही. पॉईंटर स्कोपच्या बाहेर जाण्यापूर्वी आपण त्यास सूचित करणारा नोड हटविला पाहिजे, हे टाळण्यासाठी.

पुढील विषय: स्मार्ट पॉईंटर्स सी ++ 11 आणि उच्च भाषेमध्ये त्या आहेत. त्यापूर्वी आपले स्वतःचे रोल करणे खूप सोपे होते. स्मार्ट पॉईंटर हा कन्स्ट्रक्टर आणि डिस्ट्रक्टर असलेल्या वर्गाचा ऑब्जेक्ट असतो. जेव्हा स्मार्ट पॉईंटर व्याप्तीबाहेर जातो तेव्हा त्याच्या विध्वंसकाला म्हणतात आणि विनाशक पॉईंटरच्या मालकीची वस्तू हटवितो. जरी एखादा अपवाद टाकल्यामुळे कोड बाहेर पडला असला तरीही, स्मार्ट पॉइंटर्स गळतीस प्रतिबंध करतात.