इसमें c++03
यह स्पष्ट है कि अशक्त सूचक को हटाने का कोई प्रभाव नहीं है। वास्तव में, यह स्पष्ट रूप से कहा गया §5.3.5/2
है:
या तो विकल्प में, यदि डिलीट के ऑपरेंड का मूल्य शून्य पॉइंटर है, तो ऑपरेशन का कोई प्रभाव नहीं पड़ता है।
हालांकि, इस वाक्य के लिए मौजूदा मसौदे मेंc++0x
गायब है। ड्राफ्ट के बाकी हिस्सों में मैं केवल यह बता सकता हूं कि यदि डिलीट-एक्सप्रेशन का संचालक अशक्त सूचक स्थिर नहीं है तो क्या होता है। क्या अशक्त पॉइंटर को हटाना अभी भी परिभाषित है c++0x
, और यदि हां, तो कहां?
टिप्पणियाँ:
यह सुझाव देने के लिए महत्वपूर्ण परिस्थितिजन्य साक्ष्य हैं कि यह अभी भी अच्छी तरह से परिभाषित है।
पहले, §5.3.5/2
यह बताते हुए कि दो वाक्य हैं
पहले विकल्प (डिलीट ऑब्जेक्ट) में, डिलीट के ऑपरेंड का मूल्य एक शून्य पॉइंटर मान हो सकता है, ...
तथा
दूसरे विकल्प (डिलीट अरेंज) में, डिलीट के ऑपरेंड का मूल्य एक शून्य पॉइंटर मान या ...
ये कहते हैं कि ओपेरा को शून्य होने की अनुमति है, लेकिन अपने दम पर यह वास्तव में परिभाषित नहीं करता है कि क्या होता है।
दूसरा, इसका अर्थ delete 0
बदलना एक बड़ा ब्रेकिंग परिवर्तन है, और मानक समिति इस विशेष बदलाव को बहुत कम संभावना नहीं होगी। इसके अलावा c++0x
मसौदे की संगतता अनुलग्नक (अनुलग्नक सी) में इसे तोड़ने का कोई बदलाव नहीं है । अनुलग्नक C हालांकि एक सूचनात्मक अनुभाग है, इसलिए इसका कोई असर नहीं है मानक की व्याख्या।
दूसरी ओर, यह तथ्य कि अशक्त सूचक को हटाने के लिए कोई प्रभाव नहीं पड़ता है, इसका अर्थ है कि अतिरिक्त रन-टाइम चेक। बहुत सारे कोड में ऑपरेंड कभी भी शून्य नहीं हो सकता है, इसलिए यह रनटाइम चेक शून्य ओवरहेड सिद्धांत के साथ संघर्ष में है। हो सकता है कि समिति ने भाषा के घोषित डिज़ाइन लक्ष्यों के अनुरूप मानक c ++ अधिक लाने के लिए व्यवहार को बदलने का निर्णय लिया।