दिलचस्प पोस्ट
एंड एंड एंड एंड के बीच का अंतर IQueryable लौटने के लिए <T> या वापस नहीं IQueryable <T> जावास्क्रिप्ट – एक स्ट्रिंग से चरित्र निकालें जावा में उपयोगी पर्यावरण सेटिंग्स की सूची Node.js में तुल्यकालिक मोंगो डीबी क्वेरी बनाने का सही तरीका क्या है? पायथन में एमएस वर्ड फाइलों से पाठ निकालने पृष्ठ के नीचे जावास्क्रिप्ट? प्रोल में 'और' के बीच अंतर क्या है? संख्याओं के साथ अजीब व्यवहार जिनमें एक अग्रणी शून्य है कैसे एक VBA (एक्सेल 2010) में एक चर के लिए डिफ़ॉल्ट मामला पुनर्स्थापित करता है? किसी श्रेणी की संपत्ति के रूप में एक सरणी को परिभाषित करते समय सिंटैक्स त्रुटि एकाधिक EditTexts के लिए एकल टेक्स्टवॉटर का उपयोग कैसे करें? कैसे x 86 अनुसूचित, ठीक हैं? क्या मैं एएसपी.नेट के साथ एचटीएमएल / ईमेल टेम्पलेट सेट कर सकता हूँ? कैसे एक फ़ाइल में एक फ़ोल्डर मौजूद है की जांच करने के लिए?

बिना नया बनाम एक वस्तु का प्रयोग करने में अंतर क्या है

सी ++ में,

गतिशील स्मृति आवंटन के अलावा, कोड के निम्नलिखित दो पंक्तियों के बीच एक कार्यात्मक अंतर है:

Time t (12, 0, 0); //t is a Time object Time* t = new Time(12, 0, 0);//t is a pointer to a dynamically allocated Time object 

मैं यह मानता हूं कि एक समय (int, int, int) ctor को परिभाषित किया गया है। मुझे यह भी एहसास है कि दूसरे मामले में टी को हटा दिया जाना चाहिए क्योंकि इसे ढेर पर आवंटित किया गया था। क्या कोई और अंतर है?

Solutions Collecting From Web of "बिना नया बनाम एक वस्तु का प्रयोग करने में अंतर क्या है"

रेखा:

 Time t (12, 0, 0); 

… स्थानीय स्कोप में आमतौर पर स्टैक पर टाइप Time का एक चर, आवंटित करता है, जो कि इसका दायरा समाप्त होने पर नष्ट हो जाएगा।

इसके विपरीत:

 Time* t = new Time(12, 0, 0); 

… स्मृति के एक ब्लॉक को या तो ::operator new() या Time::operator new() फोन करके, और बाद में this सेट के साथ Time::Time() उस मेमोरी ब्लॉक के भीतर एक पते पर कॉल करता है (और इसे वापस भी लौटाता है) new के परिणाम), जो तब t में संग्रहीत है जैसा कि आप जानते हैं, यह आम तौर पर ढेर (डिफ़ॉल्ट रूप से) पर किया जाता है और यह आवश्यक है कि आप इसे कार्यक्रम में बाद में delete दें, जबकि t में सूचक आमतौर पर स्टैक पर संग्रहीत किया जाता है।

एक और स्पष्ट अंतर तब होता है जब टी के चर और तरीकों तक पहुंचते हैं

 Time t (12, 0, 0); t.GetTime(); Time* t = new Time(12, 0, 0); t->GetTime(); 

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

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

ढेर पर इसे आवंटित करने और इसे ढेर पर आवंटित करने के बीच वस्तु के लिए कोई कार्यात्मक अंतर नहीं है। दोनों ऑब्जेक्ट के कन्स्ट्रक्टर को आमंत्रित करेंगे।

संयोग से मैं सुझाव देता हूं कि आप बूस्ट के साझा एपीटीआर या स्कॉपीडीपीटीआर का प्रयोग करते हैं जो ढेर पर आवंटित करते समय कार्यात्मक रूप से भी समतुल्य होता है (गैर-प्रतिलिपिनीय पॉइंटरों की प्रतिलिपि बनाने से आप को रोकने के लिए स्कोप_पीटीआर की अतिरिक्त उपयोगिता के साथ):

 scoped_ptr<Time> t(new Time(12, 0, 0)); 

नहीं .. कोई और अंतर नहीं है ..

आप पहले से ही क्या जानते हैं, इसमें कोई दूसरा अंतर नहीं है

मान लें कि आपका कोड डिफ़ॉल्ट ऑपरेटर की नई सेवा का उपयोग कर रहा है।

  • नया प्रयोग करें: गतिशील स्मृति प्राप्त करने के लिए ऑपरेटर को नया कॉल करें, और फिर कंट्रोलर फ़ंक्शन को कॉल करने के लिए।
  • नए का उपयोग न करें: ऑपरेटर को नया फ़ंक्शन कॉल नहीं करेंगे, बस सीधे कंट्रोलर फ़ंक्शन पर कॉल करने के लिए। स्टैक सीधे इस्तेमाल किया जाएगा, malloc के लिए कोई फायदा नहीं।
 void foo (Time t) { t = Time(12, 0, 0); } void bar (Time* t) { t = new Time(12, 0, 0); } int main(int argc, char *argv[]) { Time t; foo(t);//t is not (12,0,0),its value depends on your defined type Time's default constructor. bar(&t);//t is (12,0,0) return 0; }