कॉपी इनिशियलाइज़ेशन कॉपी कंस्ट्रक्टर की अवधारणा का उपयोग करके किया जा सकता है। जैसा कि हम जानते हैं कि कंस्ट्रक्टर्स का उपयोग ऑब्जेक्ट्स को इनिशियलाइज़ करने के लिए किया जाता है। हम किसी अन्य ऑब्जेक्ट की कॉपी बनाने के लिए अपना कॉपी कंस्ट्रक्टर बना सकते हैं, या दूसरे शब्दों में, वर्तमान ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट के मान से इनिशियलाइज़ कर सकते हैं। दूसरी ओर, डायरेक्ट इनिशियलाइज़ेशन असाइनमेंट ऑपरेशन का उपयोग करके किया जा सकता है।
इन दो प्रकार के इनिशियलाइज़ेशन के बीच मुख्य अंतर यह है कि कॉपी इनिशियलाइज़ेशन नए ऑब्जेक्ट के लिए एक अलग मेमोरी ब्लॉक बनाता है। लेकिन डायरेक्ट इनिशियलाइज़ेशन नया मेमोरी स्पेस नहीं बनाता। यह पिछले मेमोरी ब्लॉक को इंगित करने के लिए रेफरेंस वेरिएबल का उपयोग करता है।
कॉपी कंस्ट्रक्टर या कॉपी इनिशियलाइज़ेशन (सिंटैक्स)
classname (const classname &obj) {
// body of constructor
}
डायरेक्ट इनिशियलाइज़ेशन या असाइनमेंट ऑपरेटर (सिंटैक्स)
classname Ob1, Ob2; Ob2 = Ob1;
आइए कॉपी इनिशियलाइज़ेशन और डायरेक्ट इनिशियलाइज़ेशन के बीच विस्तृत अंतर देखें।
| कॉपी इनिशियलाइज़ेशन | डायरेक्ट इनिशियलाइज़ेशन |
|---|---|
| कॉपी इनिशियलाइज़ेशन मूल रूप से एक ओवरलोडेड कंस्ट्रक्टर है | डायरेक्ट इनिशियलाइज़ेशन असाइनमेंट ऑपरेटर का उपयोग करके किया जा सकता है। |
| यह नए ऑब्जेक्ट को पहले से मौजूद ऑब्जेक्ट के साथ इनिशियलाइज़ करता है | यह एक ऑब्जेक्ट के मान को दूसरे ऑब्जेक्ट को असाइन करता है जो पहले से मौजूद हैं। |
| कॉपी इनिशियलाइज़ेशन का उपयोग तब किया जाता है जब किसी मौजूदा ऑब्जेक्ट के साथ एक नया ऑब्जेक्ट बनाया जाता है | इसका उपयोग तब किया जाता है जब हम मौजूदा ऑब्जेक्ट को नए ऑब्जेक्ट को असाइन करना चाहते हैं। |
| दोनों ऑब्जेक्ट्स अलग-अलग मेमोरी लोकेशन का उपयोग करते हैं। | एक मेमोरी लोकेशन का उपयोग किया जाता है लेकिन अलग-अलग रेफरेंस वेरिएबल्स उसी लोकेशन को इंगित करते हैं। |
| यदि क्लास में कोई कॉपी कंस्ट्रक्टर परिभाषित नहीं है, तो कंपाइलर एक प्रदान करता है। | यदि असाइनमेंट ऑपरेटर ओवरलोड नहीं है तो बिटवाइज कॉपी बनाई जाएगी। |