2016-02-11 9 views
7

मैंने पढ़ा है कि delete[] वस्तुओं की एक सरणी को हटा सकता है। हालांकि, मैंने किसी भी स्रोत में उल्लेख नहीं किया है कि क्या यह delete[3] जैसे तर्क की आपूर्ति करने के लिए एक त्रुटि या अपरिभाषित है।क्या मैं हटा सकता हूं [] हटाने के लिए तर्क [3]?

मेरे पास निम्नलिखित प्रश्न हैं।

  1. यह है कि क्या मैं यह कर सकते हैं C++ मानक निर्दिष्ट किया जाता है/कर सकते हैं suplly delete[]delete[3] के रूप में करने के लिए एक पैरामीटर नहीं?
  2. यदि हां, तो प्रभाव क्या है?
  3. यह भी सी ++ में निर्दिष्ट है कि क्या मैं new[] से आवंटित सरणी के लिए delete का उपयोग नहीं कर सकता/सकती हूं?
+3

इस प्रश्न के लिए खेद है, लेकिन आप इसे हटाने का तर्क क्यों देना चाहेंगे? –

+2

इसे 'हटाएं सरणी [3]' के साथ भ्रमित न करें जो 'सरणी [3]' बिंदुओं को हटा देता है (इसलिए यदि आपके पास पॉइंटर्स की एक सरणी है), और 'सरणी' या इसके कुछ भाग को हटा नहीं देती है। अगर आप ऐसा करना चाहते हैं तो एक उपन्यास हटाना संभव नहीं है। – leemes

+0

फ़ंक्शन 'शून्य move_from_array (int * target, int * स्रोत) लिखने के लिए { * target = * स्रोत; हटाएं [1] स्रोत ++;/* या बस स्रोत ++ */ लक्ष्य ++ हटाएं; } ' – pasha

उत्तर

11

(1) हां, यह निर्दिष्ट करता है कि आप नहीं कर सकते हैं।

(3) यह निर्दिष्ट करता है कि परिणाम अपरिभाषित है, इसलिए नहीं।

4

delete[] एक ऑपरेटर है।

delete[x] मान्य सी ++ वाक्यविन्यास नहीं है, इसलिए कोड संकलित नहीं होगा।

+0

तो आप जो कह रहे हैं वह है 'हटाएं []' एक फ़ंक्शन नाम 'functionxyz' जैसा है और जो मैं करने की कोशिश कर रहा हूं उसे 'function123' द्वारा कॉल किया गया है? – pasha

0

हां, आप delete [x] ऑपरेटर के साथ कोई भी तर्क पारित कर सकते हैं, लेकिन इसका कोई मतलब नहीं है। यदि आप में destructor का उल्लेख करेंगे तो यह अनंत समय के लिए destructor पर कॉल करेगा। उदाहरण नीचे देखें

#include <iostream> 
using namespace std; 
class A 
{ 
public: 
A() { 
cout<<"\n Calling A constructor "; 
} 
/*~A(){ 
cout<<"\n Calling A Destructor "; 
    }*/ 
}; 
int main() 
{ 
A *a1= new A(); 

delete [3] a1; 

return 0; 
} 

यह उपरोक्त कार्यक्रम (वीसी के साथ ++ परीक्षण) संकलन और सफलतापूर्वक चलाने के लिए, uncommented कि अगर destructor हिस्सा तो सफलतापूर्वक संकलन लेकिन destrutor अनंत समय, जो कार्यक्रम के अपरिभाषित व्यवहार है कॉल करेंगे।

संबंधित मुद्दे