2010-06-23 10 views
6

free(NULL) और ::operator delete(NULL) दोनों की अनुमति है। संभाजक अवधारणा (जैसे std :: संभाजक भी deallocate(NULL,1) स्वीकार करते हैं या है यह उसके चारों ओर अपने स्वयं के गार्ड डाल करने के लिए आवश्यक है?सी ++ आवंटक <X> :: deallocate (NULL, 1) की अनुमति है?

उत्तर

9

आप।

§20.4 के अनुसार अपने स्वयं के जांच जोड़ने की आवश्यकता होगी। 1.1/8, deallocate की आवश्यकता है:

पी आवंटित() से प्राप्त एक सूचक मूल्य होगी n आवंटित के आह्वान जो पी लौटे करने पहला तर्क के रूप में पारित मूल्य के बराबर होगा

।।

allocate एक अपवाद फेंकता है जब भंडारण नहीं दिया जा सकता है (§20.4 1.1/7)। दूसरे शब्दों में, allocate कभी वापस नहीं लौटाता है, और इसलिए deallocate को कभी भी 0 प्राप्त नहीं करना चाहिए। 0 को पास करना अपरिभाषित व्यवहार का कारण बनता है।

+0

धन्यवाद, यही वह है जिसे मैं डरता था। –