new
सीखने के बाद मैंने कुछ शोध किया, malloc()
के विपरीत, जिसका उपयोग मैं किया जाता हूं, असफल आवंटन के लिए NULL वापस नहीं करता है, और पाया कि दो अलग-अलग तरीके हैं यह जांचने के लिए कि क्या नया सफल हुआ या नहीं। उन दो तरीके हैं:नया (std :: nothrow) बनाम एक कोशिश/पकड़ ब्लॉक
try
{
ptr = new int[1024];
}
catch(std::bad_alloc& exc)
{
assert();
};
और
ptr = new (std::nothrow) int[1024];
if(ptr == NULL)
assert();
मेरा मानना है कि दो तरह से एक ही लक्ष्य को पूरा, (! मुझे ठीक कर लें मैं निश्चित रूप से गलत हूँ), इसलिए मेरे सवाल यह है:
यह जांचने के लिए बेहतर विकल्प है कि new
सफलतापूर्वक पठनीयता, रखरखाव और प्रदर्शन पर आधारित है, जबकि डी-फैक्टो सी ++ प्रोग्रामिंग सम्मेलन को अनदेखा करते हुए।
अपवादों का उपयोग करें। वे आपके कोड को अधिक सार्थक, स्थानीय, रखरखाव और स्केलेबल बनाते हैं। –
केवल पठनीयता के संबंध में, निश्चित रूप से अपवाद हैंडलिंग के बिना एक। प्रदर्शन के संबंध में, शायद 'नोट्रो' भी हो सकता है। लेकिन मुझे यकीन है कि अतिवादियों का तर्क होगा। लेकिन अगर आप केवल एक सरल दावा विफलता चाहते हैं, तो आप फेंकने वाले संस्करण का भी उपयोग कर सकते हैं और अपवाद हैंडलर को छोड़ सकते हैं;) –
उस कोड का क्या मतलब है? आप एक विशिष्ट, सार्थक अपवाद को पकड़ रहे हैं और फिर 'assert() 'के माध्यम से एक अर्थहीन बना रहे हैं ... – Blindy