मैं एक नाशक के साथ एक समस्या हो रहा है एक सबरूटीन भले ही यह सबरूटीन के दायरे से बाहर परिभाषित किया जाना चाहिए के अंत में एक वर्ग के लिए बुलाया जा रहा है।सी ++: नाशक से पहले यह क्षेत्र से बाहर जाना चाहिए बुलाया जा रहा है?
#include <iostream>
using namespace std;
class Foo {
private:
double *array;
public:
Foo(int N) {
array = new double[N];
for (int i=0; i<N; i++) {
array[i]=0;
}
}
~Foo() {
delete[] array;
}
};
void subroutine(Foo x) {
cout << "Hello!" << endl;
}
int main() {
Foo bar(10);
subroutine(bar);
subroutine(bar);
}
अब वस्तु बार यहाँ पहली सबरूटीन के बाद कहा जाता हो जाता है के लिए नाशक खत्म भले ही यह गुंजाइश की पूरी होना चाहिए:
यहाँ कि मेरी समस्या को प्रदर्शित करता है कोड मैं सबसे छोटी टुकड़ा है मुख्य कार्य? इसका मतलब यह है कि जब मैं दूसरा सबराउटिन कहता हूं तो विनाशक को फिर से बुलाया जाता है और मुझे स्मृति रिसाव मिलती है।
मैं पाया है मैं सबरूटीन में संदर्भ द्वारा फोन करके इसे ठीक कर सकते हैं, लेकिन मैं इसे ठीक से बहुत संतुष्ट के बाद मुझे समझ में क्यों यह पहली जगह में काम नहीं किया न नहीं कर रहा हूँ। क्या कोई इस पर मेरे लिए कुछ प्रकाश डाल सकता है?
धन्यवाद।
अपने विनाशक को देखते हुए, आपको 'Foo' की प्रतिलिपि बनाने और प्रतिलिपि असाइनमेंट ऑपरेटर को परिभाषित करने या हटाने की आवश्यकता है। "तीन के नियम" के लिए खोजें। –
"विनाशक को कक्षा के लिए बुलाया जा रहा है" - आप पाएंगे कि, समय के साथ, चीजें अधिक स्पष्ट होती हैं यदि आप लगातार ** कक्षा ** और ** ऑब्जेक्ट ** के बीच अंतर करते हैं। विधियों को ** वस्तुओं पर नहीं कहा जाता है ** कक्षाओं पर नहीं। –