GCC 6 में एक नया ऑप्टिमाइज़र फ़ीचर है : यह मानता है कि thisयह हमेशा अशक्त नहीं है और इसके आधार पर अनुकूलन करता है।
मान श्रेणी प्रसार अब मानता है कि C ++ सदस्य फ़ंक्शन का यह सूचक गैर-शून्य है। यह सामान्य अशक्त पॉइंटर चेक को समाप्त कर देता है, लेकिन कुछ गैर-अनुरूपता कोड-बेस (जैसे Qt-5, क्रोमियम, केडेवलप) को भी तोड़ देता है । एक अस्थायी काम के रूप में, लगभग -fno-delete-null-सूचक-चेक का उपयोग किया जा सकता है। गलत कोड को -ffanitize = अनिर्धारित के उपयोग से पहचाना जा सकता है।
परिवर्तन दस्तावेज़ स्पष्ट रूप से इसे खतरनाक बताता है क्योंकि यह बार-बार उपयोग किए जाने वाले कोड की एक आश्चर्यजनक मात्रा को तोड़ता है।
यह नई धारणा व्यावहारिक C ++ कोड को क्यों तोड़ेगी? क्या ऐसे विशेष पैटर्न हैं जहां लापरवाह या बिना सूचना के प्रोग्रामर इस विशेष अपरिभाषित व्यवहार पर भरोसा करते हैं? मैं किसी को भी लिखने की कल्पना नहीं कर सकता if (this == NULL)क्योंकि यह इतना अप्राकृतिक है।
thisइसे एक अंतर्निहित पैरामीटर के रूप में पारित किया गया है, इसलिए वे तब इसका उपयोग करना शुरू करते हैं जैसे कि यह एक स्पष्ट पैरामीटर था। यह। जब आप इसे शून्य मानते हैं, तो आप यूबी को वैसे ही आमंत्रित कर रहे हैं जैसे कि आपने किसी अन्य अशक्त सूचक को निष्क्रिय कर दिया हो। बस इतना ही है। यदि आप nullptrs को पास करना चाहते हैं, तो एक स्पष्ट पैरामीटर, DUH का उपयोग करें । यह कोई भी धीमा नहीं होगा, यह किसी भी प्रकार का क्लिंकर नहीं होगा, और ऐसे एपीआई वाले कोड को वैसे भी इंटर्नशिप में गहरा है, इसलिए इसमें बहुत सीमित गुंजाइश है। कहानी का अंत मुझे लगता है।