क्या मैं केवल प्रतिलिपि संदर्भ के बजाय एक सूचक में गुजरकर एक प्रतिलिपि लिख सकता हूं? (यह अगर मुझे यकीन है कि मैं किसी भी मूल्यों को बदलने के लिए हालांकि नहीं जा रहा हूँ कर ठीक होगा?)रचनाकारों की प्रतिलिपि बनाएँ - सी ++
तो जैसा:
SampleClass::SampleClass(SampleClass* p)
{
//do the necessary copy functionality
}
के बजाय:
SampleClass::SampleClass(const SampleClass& copyObj)
{
//do the necessary copy
}
अग्रिम धन्यवाद।
सभी को धन्यवाद। इसलिए, अगर मैं एक कन्स्ट्रक्टर लिखता हूं जो एक पॉइंटर लेता है (और सोचा कि यह मेरी प्रतिलिपि निर्माता है), तो संकलक अभी भी डिफॉल्ट कॉपी कन्स्ट्रक्टर के साथ आपूर्ति करेगा, जिस स्थिति में मेरा कन्स्ट्रक्टर (जिसे मैंने सोचा था कि मेरी प्रतिलिपि निर्माता थी) को नहीं कहा जाएगा और डिफ़ॉल्ट प्रतिलिपि कन्स्ट्रक्टर कहा जाएगा। समझ गया।
आपको लगता है कि कोड में अपरिभाषित व्यवहार लागू बिना एक अशक्त संदर्भ नहीं मिल सकता है। तथ्य के बाद न्यूल के लिए परीक्षण उपयोगी नहीं है, क्योंकि त्रुटि दूसरे कोड में है। वास्तव में, संकलक परीक्षण 'अगर (और MyClassCopy == NULL)' को अनुकूलित कर सकता है क्योंकि यह किसी भी सही प्रोग्राम में कभी नहीं हो सकता है। –
मैं मानता हूं कि एक नल पॉइंटर को डिफ्रेंस करना एक अमान्य ऑपरेशन है, और एनयूएलएल के लिए परीक्षण सबसे अच्छा ऑपरेशन से पहले किया जाता है। हालांकि, एनयूएलएल को रन टाइम के दौरान असाइन किया जा सकता है, इसलिए अधिकांश कंपाइलर्स आपको एक पूर्ण संदर्भ बनाने की अनुमति देंगे और इसके लिए कंपाइलर की जांच करने का कोई तरीका नहीं होगा। या नल आउट के लिए एक परीक्षण अनुकूलित करने के लिए,। आप इसे g ++ और परीक्षण कार्यों के साथ आज़मा सकते हैं। – Rob
प्रतिबिंब के एक पल के बाद, आप सही हैं, आपको dereference ऑपरेशन से पहले शून्य के लिए परीक्षण करना होगा। तथ्य के बाद परीक्षण वास्तव में अपरिभाषित है। – Rob