मुझे पता है कि delete
एक अशक्त सूचक ing नो-सेशन है:क्या यह एक शून्य शून्य * सूचक को हटाने के लिए अपरिभाषित व्यवहार है?
या तो वैकल्पिक रूप से, अगर हटाने की संकार्य के मूल्य में नल पॉइंटर आपरेशन कोई प्रभाव नहीं है है।
(सी ++ स्टैंडर्ड5.3.5 [expr.delete] p2
)
और यह भी है कि एक void*
सूचक को हटाने अपरिभाषित व्यवहार क्योंकि वहाँ के रूप में प्रकार void
का कोई वस्तुओं रहे हैं नाशक नहीं कहा जा सकता है: में
पहला विकल्प (
delete object
), हटाए जाने के संचालन का मूल्य एक गैर-सरणी ऑब्जेक्ट के लिए एक सूचक या ऐसी ऑब्जेक्ट की बेस क्लास का प्रतिनिधित्व करने वाले उप-ऑब्जेक्ट के पॉइंटर होगा। यदि नहीं, तो व्यवहार अपरिभाषित है।
(सी ++ स्टैंडर्ड5.3.5 [expr.delete] p2
)
अब, सामान्य रूप से मैं इसे ले कि चीजें हैं जो पहले चीजें हैं जो बाद में सूचीबद्ध हैं, लेकिन के बारे में निम्नलिखित के रूप में अशक्त void*
सूचक क्या निष्प्रभावी सूचीबद्ध हैं?
void* p = 0;
delete p; // UB or well-defined?
मैं इस प्रकार के बावजूद "एक पूर्ण सूचक को हटाने" में गिरने के एक अच्छी तरह से परिभाषित व्यवहार की अपेक्षा करता हूं। वास्तविक मुक्त करने और विनाशक को बुलाकर आदर्श रूप से न्यूल के लिए चेक का पालन करना चाहिए। – hackworks
अंडे या चिकन ?? –
जी ++ पर मुझे चेतावनी मिलती है 'हटाना' शून्य * 'अपरिभाषित है'। मुझे लगता है कि इसकी यूबी (100% निश्चित नहीं)। –