delete[]
ऑपरेटर हटाने सरणियों किया जाता है। delete
ऑपरेटर गैर सरणी वस्तुओं को हटाने के लिए प्रयोग किया जाता है। यह मेमोरी को हटाने के लिए क्रमशः कॉल करता है operator delete[]
और operator delete
कार्य करता है कि सरणी के तत्वों या गैर-सरणी ऑब्जेक्ट के लिए विध्वंसक को कॉल करने के बाद (अंततः) कब्जे वाली सरणी या गैर-सरणी ऑब्जेक्ट।
निम्नलिखित संबंधों को दर्शाता है:
typedef int array_type[1];
// create and destroy a int[1]
array_type *a = new array_type;
delete [] a;
// create and destroy an int
int *b = new int;
delete b;
// create and destroy an int[1]
int *c = new int[1];
delete[] c;
// create and destroy an int[1][2]
int (*d)[2] = new int[1][2];
delete [] d;
के लिए new
है कि एक सरणी बनाता है (हां, तो या तो new type[]
या new
एक सरणी प्रकार निर्माण करने के लिए लागू), एक के लिए मानक दिखता operator new[]
सरणी के तत्व प्रकार कक्षा में या वैश्विक क्षेत्र में, और अनुरोध किया स्मृति की मात्रा से गुजरता है। N * sizeof(ElementType)
यदि यह चाहता है कि यह अधिक से अधिक अनुरोध कर सकता है (उदाहरण के लिए तत्वों की संख्या को संग्रहीत करने के लिए, इसलिए बाद में जब हटाने से पता चलता है कि कितने विध्वंसक कॉल किए जाते हैं)। यदि कक्षा घोषित करती है operator new[]
कि स्मृति की मात्रा को अतिरिक्त कोई और स्वीकार करता हैsize_t
, तो दूसरा पैरामीटर आवंटित तत्वों की संख्या प्राप्त करेगा - यह किसी भी उद्देश्य के लिए इसका उपयोग कर सकता है (डिबगिंग, आदि ...)।
इसके लिए new
एक गैर-सरणी ऑब्जेक्ट बनाता है, यह operator new
तत्व के वर्ग में या वैश्विक दायरे में दिखेगा । यह अनुरोधित मेमोरी की मात्रा ( sizeof(T)
हमेशा हमेशा) पास करता है।
इसके लिए delete[]
, यह सरणियों के तत्व वर्ग प्रकार में दिखता है और उनके विनाशकों को बुलाता है। operator delete[]
उपयोग किया जाने वाला फ़ंक्शन तत्व प्रकार की कक्षा में एक है, या यदि वैश्विक दायरे में कोई नहीं है।
इसके लिए delete
, यदि पॉइंटर पास किया गया वास्तविक वस्तु के प्रकार का एक आधार वर्ग है, तो आधार वर्ग में एक आभासी विध्वंसक होना चाहिए (अन्यथा, व्यवहार अपरिभाषित है)। यदि यह एक आधार वर्ग नहीं है, तो उस वर्ग के विध्वंसक को कहा जाता है, और operator delete
उस कक्षा में या वैश्विक operator delete
उपयोग किया जाता है। यदि एक आधार वर्ग पारित किया गया था, तो वास्तविक वस्तु प्रकार के विध्वंसक को कहा जाता है, और operator delete
उस वर्ग में पाया जाता है, या यदि कोई नहीं है, तो एक वैश्विक operator delete
कहा जाता है। यदि operator delete
कक्षा में दूसरे प्रकार का पैरामीटर है size_t
, तो उसे डीललोकेट करने के लिए तत्वों की संख्या प्राप्त होगी।