पॉइंटर का उपयोग करने के फायदे 3 डीएच द्वारा रेखांकित हैं: आलसी प्रारंभिकता, हेडर निर्भरताओं में कमी, और वस्तु के जीवनकाल पर नियंत्रण।
भी नुकसान हैं। जब आपके पास पॉइंटर डेटा सदस्य होता है, तो आपको यह सुनिश्चित करने के लिए कि ऑब्जेक्ट की एक प्रति ठीक से बनाई गई है, आपको शायद अपनी प्रतिलिपि कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर लिखना होगा। बेशक, आपको विनाशक में वस्तु को हटाना भी याद रखना चाहिए। साथ ही, यदि आप मौजूदा क्लास में पॉइंटर डेटा सदस्य जोड़ते हैं, तो आपको कॉपी कन्स्ट्रक्टर और ऑपरेटर = को अपडेट करना याद रखना चाहिए। संक्षेप में, एक पॉइंटर डेटा सदस्य होने के लिए आपके लिए अधिक काम है।
एक और नुकसान वास्तव में पॉइंटर द्वारा इंगित ऑब्जेक्ट के जीवनकाल पर नियंत्रण का फ्लिप पक्ष है। ऑब्जेक्ट नष्ट होने पर गैर-पॉइंटर डेटा सदस्यों को स्वचालित रूप से नष्ट कर दिया जाता है, जिसका अर्थ है कि आप हमेशा यह सुनिश्चित कर सकते हैं कि जब तक ऑब्जेक्ट मौजूद न हो तब तक वे मौजूद हों। सूचक के साथ, आपको nullptr
होने की जांच करनी होगी, जिसका अर्थ यह भी है कि आपको इसे nullptr
पर सेट करना सुनिश्चित करना होगा जब भी यह कुछ भी इंगित न करे। इससे निपटने के लिए आसानी से बग का कारण बन सकता है।
अंत में, गैर-सूचक सदस्यों तक पहुंच तेजी से होने की संभावना है, क्योंकि वे स्मृति में संगत हैं। दूसरी ओर, ढेर पर आवंटित ऑब्जेक्ट को इंगित करने वाले पॉइंटर डेटा सदस्य तक पहुंचने से कैश मिस का कारण बन सकता है, जिससे इसे धीमा कर दिया जाता है।
आपके प्रश्न का कोई जवाब नहीं है। आपको अपने डिज़ाइन को देखना होगा, और यह तय करना होगा कि पॉइंटर डेटा सदस्यों के फायदे अतिरिक्त सिरदर्द से अधिक हैं या नहीं। यदि संकलन समय और शीर्षलेख निर्भरता को कम करना महत्वपूर्ण है, तो pimpl idiom का उपयोग करें। यदि कुछ मामलों में आपकी ऑब्जेक्ट के लिए आपका डेटा सदस्य आवश्यक नहीं हो सकता है, तो पॉइंटर का उपयोग करें, और आवश्यकता होने पर इसे आवंटित करें। यदि ये आकर्षक कारणों की तरह नहीं लगते हैं, और आप अतिरिक्त काम नहीं करना चाहते हैं, तो पॉइंटर का उपयोग न करें।
आलसी प्रारंभिकरण के लिए, जब भी संभव हो, मैं 'boost :: वैकल्पिक' का उपयोग करने की सलाह दूंगा। यह सूचक से सुरक्षित है क्योंकि आप इस पर अंकगणित नहीं कर सकते हैं। –
लेकिन कई (मेरे जैसे) बूस्ट का उपयोग नहीं करते हैं - इसलिए यह एक बहुत ही मंच और ढांचा स्वतंत्र तरीका है ;-) ... उदाहरण के लिए मैं केवल क्यूटी :-) – 3DH
का उपयोग करता हूं लेकिन जो लोग 'बूस्ट' का उपयोग नहीं करते हैं :) – GManNickG