मानक के अनुसार आपके लिए आवंटन/आवंटन रद्द समारोह पूरी तरह से (new
- delete
, new[]
- delete[]
, malloc
- free
) से मेल करने के लिए है। सैद्धांतिक रूप से, यह काफी संभव है कि कुछ कंपाइलर operator new()
को सरल malloc()
के रूप में कार्यान्वित करते हैं, इसलिए इससे कोई दुर्घटना नहीं होती है, लेकिन "केवल" विनाशक कॉल को छोड़कर (जो स्वयं ही खराब है)। हालांकि, operator[]
मेमोरी के आवंटित खंड में तत्वों की संख्या संग्रहीत कर सकता है, इस मामले में, अंकों द्वारा malloc()
(शुरुआत में नहीं) द्वारा आवंटित कुछ ब्लॉक के अंदर पते लौटाया गया, जिसका अर्थ है कि आप इसे free()
से मुक्त नहीं कर सकते हैं।
आपको अब और हमेशा के लिए अपरिभाषित व्यवहार मिलता है। [ऐसा मत करो।] (Http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.3) – GManNickG
वह पूछ रहा है कि आपको यह व्यवहार क्यों मिलता है, बस उसे नहीं करना यह किसी भी चीज की समझ में मदद नहीं करता है। – bobDevil
@bobDevil: ठीक है, व्यवहार C++ मानक द्वारा अपरिभाषित है, जिसका अर्थ है कि भाषा कार्यान्वयनकर्ता उचित व्यवहार को लागू करने की कोई इच्छा महसूस नहीं करेंगे। कोई पारंपरिक व्यवहार नहीं है ("ऐसा मत करो!") के अलावा, इसलिए यहां तक कि एक अनौपचारिक मानक भी नहीं है। अनुभवजन्य, व्यवहार अलग-अलग लगता है। इसलिए, आप किसी विशेष व्यवहार पर भरोसा नहीं कर सकते हैं, और कोई कंपाइलर इंजीनियर आपको कोई सहानुभूति देने वाला नहीं है। यह कहना पर्याप्त कारण है कि "ऐसा मत करो!" किसी भी विशेष व्यवहार के कारण किसी भी स्पष्टीकरण के बिना। –