Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में कॉपी इनिशियलाइज़ेशन और डायरेक्ट इनिशियलाइज़ेशन में क्या अंतर है?


कॉपी इनिशियलाइज़ेशन कॉपी कंस्ट्रक्टर की अवधारणा का उपयोग करके किया जा सकता है। जैसा कि हम जानते हैं कि कंस्ट्रक्टर्स का उपयोग ऑब्जेक्ट्स को इनिशियलाइज़ करने के लिए किया जाता है। हम किसी अन्य ऑब्जेक्ट की कॉपी बनाने के लिए अपना कॉपी कंस्ट्रक्टर बना सकते हैं, या दूसरे शब्दों में, वर्तमान ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट के मान से इनिशियलाइज़ कर सकते हैं। दूसरी ओर, डायरेक्ट इनिशियलाइज़ेशन असाइनमेंट ऑपरेशन का उपयोग करके किया जा सकता है।

इन दो प्रकार के इनिशियलाइज़ेशन के बीच मुख्य अंतर यह है कि कॉपी इनिशियलाइज़ेशन नए ऑब्जेक्ट के लिए एक अलग मेमोरी ब्लॉक बनाता है। लेकिन डायरेक्ट इनिशियलाइज़ेशन नया मेमोरी स्पेस नहीं बनाता। यह पिछले मेमोरी ब्लॉक को इंगित करने के लिए रेफरेंस वेरिएबल का उपयोग करता है।

कॉपी कंस्ट्रक्टर या कॉपी इनिशियलाइज़ेशन (सिंटैक्स)

classname (const classname &obj) { 
    // body of constructor 
}

डायरेक्ट इनिशियलाइज़ेशन या असाइनमेंट ऑपरेटर (सिंटैक्स)

classname Ob1, Ob2; 
Ob2 = Ob1;

आइए कॉपी इनिशियलाइज़ेशन और डायरेक्ट इनिशियलाइज़ेशन के बीच विस्तृत अंतर देखें।

कॉपी इनिशियलाइज़ेशनडायरेक्ट इनिशियलाइज़ेशन
कॉपी इनिशियलाइज़ेशन मूल रूप से एक ओवरलोडेड कंस्ट्रक्टर हैडायरेक्ट इनिशियलाइज़ेशन असाइनमेंट ऑपरेटर का उपयोग करके किया जा सकता है।
यह नए ऑब्जेक्ट को पहले से मौजूद ऑब्जेक्ट के साथ इनिशियलाइज़ करता हैयह एक ऑब्जेक्ट के मान को दूसरे ऑब्जेक्ट को असाइन करता है जो पहले से मौजूद हैं।
कॉपी इनिशियलाइज़ेशन का उपयोग तब किया जाता है जब किसी मौजूदा ऑब्जेक्ट के साथ एक नया ऑब्जेक्ट बनाया जाता हैइसका उपयोग तब किया जाता है जब हम मौजूदा ऑब्जेक्ट को नए ऑब्जेक्ट को असाइन करना चाहते हैं।
दोनों ऑब्जेक्ट्स अलग-अलग मेमोरी लोकेशन का उपयोग करते हैं।एक मेमोरी लोकेशन का उपयोग किया जाता है लेकिन अलग-अलग रेफरेंस वेरिएबल्स उसी लोकेशन को इंगित करते हैं।
यदि क्लास में कोई कॉपी कंस्ट्रक्टर परिभाषित नहीं है, तो कंपाइलर एक प्रदान करता है।यदि असाइनमेंट ऑपरेटर ओवरलोड नहीं है तो बिटवाइज कॉपी बनाई जाएगी।

  1. - C++ में new ऑपरेटर और operator new में क्या अंतर है?

    C++ में जब हम एक नया ऑब्जेक्ट बनाना चाहते हैं, तो हमें मेमोरी में एक मेमोरी ब्लॉक बनाना होगा, फिर उस मेमोरी ब्लॉक को आरंभ करने के लिए कंस्ट्रक्टर को भी कॉल करना होगा। हम new कीवर्ड का उपयोग करके मेमोरी एलिमेंट बना सकते हैं। यह new ऑपरेटर दो लगातार कार्य करता है। लेकिन operator new केवल मेमोरी स्पेस

  1. - C++ में 'struct' और 'typedef struct' में अंतर?

    C++ में, struct और typedef struct के बीच कोई अंतर नहीं है क्योंकि, C++ में, सभी struct/union/enum/class घोषणाएं ऐसा व्यवहार करती हैं जैसे वे इम्प्लिसिटली typedefed हैं, जब तक कि नाम उसी नाम की किसी अन्य घोषणा द्वारा छिपा नहीं जाता। हालांकि एक सूक्ष्म अंतर है कि typedefs को फॉरवर्ड डिक्लेयर नहीं किय

  1. - C++ स्ट्रिंग कॉन्स्टेंट्स और कैरेक्टर कॉन्स्टेंट्स में अंतर

    C++ में, सिंगल कोट्स में एक कैरेक्टर एक कैरेक्टर लिटरल है। इसका प्रकार char है। उदाहरण के लिए, a ASCII आधारित सिस्टम पर मान 97 के साथ char प्रकार का है। डबल कोट्स में एक कैरेक्टर या कैरेक्टर्स की स्ट्रिंग एक स्ट्रिंग लिटरल दर्शाती है। इसका प्रकार const char[] है और यह स्ट्रिंग की लंबाई + 1 के आकार