दिलचस्प पोस्ट
ओएसएक्स पर .so और .dialib के बीच अंतर क्या हैं? बिटमैप की अस्पष्टता कैसे बदलनी है? क्रोम एक्सटेंशन संदेश पासिंग: प्रतिक्रिया नहीं भेजी गई कैसे दो सरणियों को एक साथ संयोजित करें? एंड्रॉइड गतिविधि जीवन चक्र – इन सभी तरीकों के लिए क्या हैं? मैं Google क्रोम एक्सटेंशन से मौजूदा टैब का यूआरएल कैसे प्राप्त करूं? आरबीआई में rbind का उपयोग करके एकाधिक .csv फ़ाइलों को एकल डेटाफ्रेम में लोड करने में समस्या OpenCV – मॉड्यूल cv2 नहीं मिल सकता है Angular2 + टाइपस्क्रिप्ट एप्लिकेशन में रद्दी का आयात करना पृष्ठभूमिवर्कर बनाम पृष्ठभूमि थ्रेड सादा पाठ के रूप में HTML टैग कैसे प्रदर्शित करें बूटस्ट्रैप 3: पृष्ठ ताज़ा पर चयनित टैब रखें मैं कैसे exec () समस्याओं को डीबग कर सकता हूँ? जावा पेज को डीआईवी तक लंबा पेज स्क्रॉल करना स्ट्रिंग्स को यूआरएल और फाइलनाम सुरक्षित बनाने के लिए सिनिटिंग करना?

'नए ऑपरेटर' और 'ऑपरेटर नए' के ​​बीच का अंतर?

"नया ऑपरेटर" और "ऑपरेटर नया" के बीच अंतर क्या है?

वेब के समाधान से एकत्रित समाधान "'नए ऑपरेटर' और 'ऑपरेटर नए' के ​​बीच का अंतर?"

मैं आम तौर पर दो चीजों के बीच अंतर करने के लिए अलग-अलग वाक्यांशों की कोशिश करता हूं, लेकिन किसी भी मामले में यह एक अच्छा सवाल है।

ऑपरेटर नया एक ऐसा कार्य है जो कच्ची स्मृति आवंटित करता है – कम से कम अवधारणात्मक रूप से, यह malloc() से बहुत भिन्न नहीं है हालांकि यह काफी असामान्य है जब तक कि आप अपने कंटेनर की तरह कुछ लिख रहे हों, आप ऑपरेटर को सीधे सीधे कॉल कर सकते हैं, जैसे:

 char *x = static_cast<char *>(operator new(100)); 

ओवरलोड ऑपरेटर को संभवतः विश्व स्तर पर या किसी विशिष्ट श्रेणी के लिए संभव है। आईआईआरसी, हस्ताक्षर है:

 void *operator new(size_t); 

बेशक, यदि आप ऑपरेटर को अधिभार देते हैं (या तो वैश्विक या क्लास के लिए), तो आप भी चाहेंगे कि मिलान ऑपरेटर को भी हटाए जाने की ज़रूरत हो। इसके लायक होने के लिए, एक अलग ऑपरेटर नया [] भी है जो कि सरणियों के लिए स्मृति आवंटित करने के लिए उपयोग किया जाता है – लेकिन आप पूरी तरह से पूरी तरह से पूरे गंदे को अनदेखा करने से बेहतर हैं।

नया ऑपरेटर वह है जो आप सामान्य रूप से मुफ्त स्टोर से एक ऑब्जेक्ट बनाने के लिए उपयोग करते हैं:

 my_class *x = new my_class(0); 

दोनों के बीच अंतर यह है कि ऑपरेटर नया ही कच्चे स्मृति को आवंटित करता है, और कुछ नहीं। नए ऑपरेटर को मेमोरी आवंटित करने के लिए ऑपरेटर का इस्तेमाल करना शुरू होता है, लेकिन फिर वह सही प्रकार के ऑब्जेक्ट के लिए कन्स्ट्रक्टर का आह्वान करता है, इसलिए परिणाम उस मेमोरी में बनाया गया एक वास्तविक लाइव ऑब्जेक्ट है। यदि उस ऑब्जेक्ट में किसी भी अन्य ऑब्जेक्ट (या तो एम्बेडेड या बेस क्लास के रूप में) शामिल हैं तो उन कन्स्ट्रक्टर के रूप में भी लागू होते हैं।

"ऑपरेटर नया"

 class Foo { public: void* operator new( size_t ); } 

"नया ऑपरेटर":

 Foo* foo = new Foo(); 

इस उदाहरण में, new Foo() Foo::operator new() कॉल करता है

दूसरे शब्दों में, "नए ऑपरेटर" को " operator new() " कहते हैं, जैसे कि + ऑपरेटर कॉल operator +()

निम्नलिखित स्कॉट मेयेर से अधिक प्रभावी सी ++ पुस्तक से बोली है:

नया ऑपरेटर अपेक्षित स्मृति आवंटन करने के लिए एक फ़ंक्शन कॉल करता है, और आप उसके व्यवहार को बदलने के लिए फ़ंक्शन को फिर से लिखना या ओवरलोड कर सकते हैं। फ़ंक्शन का नाम नई ऑपरेटर कॉल आवंटित करने के लिए कॉल ऑपरेटर नया है।

"नया ऑपरेटर" और "ऑपरेटर नया" के बीच कोई अंतर नहीं है दोनों एक ही बात का उल्लेख करते हैं: ओवरलोड करने योग्य / बदले जाने योग्य operator new फ़ंक्शन जो आम तौर पर नए-भावों द्वारा बनाए गए ऑब्जेक्ट के लिए कच्चे स्मृति आवंटन करता है

यह भी ध्यान रखें कि भाषा विनिर्देश (जो आधिकारिक शब्दावली का परिभाषित स्रोत है) में न तो शब्द मौजूद है।

जब आप किसी वस्तु को बनाने के लिए अपने प्रोग्राम में new उपयोग करते हैं, तो इसे नए-अभिव्यक्ति कहा जाता है नई अभिव्यक्ति में व्याकरण द्वारा परिभाषित कीवर्ड new और अतिरिक्त वाक्यविन्यास भागों होते हैं। इस अभिव्यक्ति की वाक्य-रचना का कोई भी हिस्सा कभी भी "ऑपरेटर" नहीं है

कच्चे स्मृति आवंटन फ़ंक्शन operator new आधिकारिक तौर पर " operator new फ़ंक्शन" कहा जाता है ध्यान दें कि इस क्रम में शब्द operator और new सिर्फ दो अलग-अलग सी ++ भाषा कीवर्ड्स हैं। वे एक अंग्रेजी शब्द "ऑपरेटर नया" नहीं बनाते हैं कहीं भी भाषा विनिर्देश में आपको "ऑपरेटर न्यू" के किसी भी संदर्भ को एक अंग्रेजी शब्द के रूप में मिलेगा। हर बार यह सिर्फ दो स्वतंत्र खोजशब्दों का संयोजन होता है जो स्मृति आवंटन फ़ंक्शन के लिए घोषणा सिंटैक्स का उत्पादन करते हैं।

दोबारा, फिर से शुरू में: औपचारिक रूप से सी ++ में "ऑपरेटर न्यू" या "नया ऑपरेटर" के रूप में ऐसा कोई अंग्रेजी भाषा का शब्द नहीं है। पूर्व अनुक्रम भाषा विनिर्देश में कीवर्ड का एक मात्र संयोजन है, एक अंग्रेजी शब्द के रूप में नहीं। उत्तरार्द्ध बिल्कुल मौजूद नहीं है।

जब आप एक नया ऑब्जेक्ट बनाते हैं तो स्मृति ऑपरेटर का उपयोग करके आवंटित किया जाता है तो मेमोरी को आरम्भ करने के लिए कन्स्ट्रक्टर को लागू किया जाता है। नया ऑपरेटर दोनों आवंटन और आरंभिकता करता है, जहां ऑपरेटर के रूप में नया केवल आवंटन करता है।

ओपी के सवाल ठीक से phrased नहीं है यह 'ऑपरेटर के बीच अंतर' और 'नई अभिव्यक्ति' के रूप में चरण के लिए बेहतर है? ' नोट 'ऑपरेटर नया' अक्सर 'ऑपरेटर नए फ़ंक्शन' को भी संदर्भित करता है।

और यहां बहुत सारे सही उत्तर हैं, नीचे मेरा है:

1> कच्चे स्मृति आवंटित करने के लिए 'नई अभिव्यक्ति' कॉल 'ऑपरेटर नया', फिर कन्स्ट्रक्टर को कॉल करें

 apple * p = new apple(); //new expression 

2> 'ऑपरेटर न्यू' केवल कच्चे स्मृति आवंटित, मॉलोक से ज्यादा अंतर नहीं है

 void* mem = operator new(sizeof(apple)); //just like calling malloc() apple* p2 = new(mem) apple(1); //call construct here using placement new. 

नया ऑपरेटर : सी ++ नए ऑपरेटर का उपयोग करके वस्तुओं के गतिशील आवंटन का समर्थन करता है। नया ऑपरेटर एक पूल से ऑब्जेक्ट के लिए मेमोरी आवंटित करता है जिसे मुफ्त स्टोर कहा जाता है। नया ऑपरेटर विशेष फ़ंक्शन ऑपरेटर को नए कॉल करता है

ऑपरेटर नया : यदि अनुरोध भंडारण के शून्य बाइट्स के लिए है, तो ऑपरेटर नया एक विशिष्ट ऑब्जेक्ट के लिए एक संकेतक देता है (अर्थात, ऑपरेटर के दोहराई जाने वाली कॉल को अलग-अलग पॉइंटर्स लौटाते हैं)। अगर आवंटन अनुरोध के लिए अपर्याप्त स्मृति है, तो ऑपरेटर नया नल देता है या एक अपवाद फेंकता है। ऑपरेटर के लिए पहला तर्क प्रकार का होना चाहिए size_t (एक प्रकार STDDEF.H में परिभाषित), और वापसी का प्रकार हमेशा शून्य है *।

अधिक जानकारी के लिए यहां एक एमएसडीएन लिंक है:

ऑपरेटर नया फ़ंक्शन

नया ऑपरेटर

  1. नया एक ऑपरेटर और साथ ही एक कीवर्ड है।

    2.13 और 2.12 में देखें [1]

  2. नया दो बातें करता है: टी * टी = नया टी (आर्ग);

    1) ऑब्जेक्ट के लिए मेमोरी आवंटित करें: शून्य * ptr = ऑपरेटर नया (आकारफ (टी));

    // ऑपरेटर नया एक फ़ंक्शन है (सी में मॉलोक की तरह), एक ऑपरेटर नहीं। (देखें [1] 3.7.4 में) लेकिन मद 7 [2] ने कहा कि यह एक ऑपरेटर भी है। मेरी राय में, ऑपरेटर और फ़ंक्शन के बीच का अंतर छोटा है, और जब आप याद करते हैं कि ओवरलोडिंग ऑपरेटर फ़ंक्शन द्वारा कार्यान्वित किया गया है, तो आप उसे देख सकते हैं।

    // हम इस ऑपरेटर / फ़ंक्शन (ऑपरेटर नई) को अधिभार कर सकते हैं जो हम चाहते हैं कि ये सिर्फ यहाँ।

    2) आवंटित स्मृति में ऑब्जेक्ट को इनिशियलाइज़ करें: पीटीआर पर कॉल टी :: टी (आर्ग)

    // केवल कंपाइलर ऐसा कर सकते हैं न तो मुझे और न ही आप कर सकते हैं

    // भी संकलक सदस्य वस्तुओं के कंसल्टेंटर्स और बेस क्लास के कन्स्ट्रक्टर को आमंत्रित करेगा यदि टी के पास है और यह आमंत्रण पुनरावर्ती है केवल कंपाइलर ऐसा कर सकता है

  3. इसलिए, ऑपरेटर नया नए के मिशन का हिस्सा है, और केवल इस हिस्से में हम कुछ कर सकते हैं।

    [1]: आईएसओ / आईईसी, एन 36 9 0 http://ww.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf

    [2]: मेयेर, स्कॉट प्रभावी सी ++, तीसरा