2011-09-06 3 views
6

मेरे पास एक वैश्विक डी मॉड्यूल है जिसमें कुछ सहायक फ़ंक्शन (अर्थात् लॉगिंग के लिए) हैं, जो मॉड्यूल-स्तर पर हैं और कक्षा में नहीं हैं। हालांकि, इन कार्यों को एक विनाशक से बुलाते समय, मुझे कोर.एक्सप्शन मिलता है .ऑटऑफमेमरी एरर और/या ऐप लटकता है और दुर्घटनाग्रस्त हो जाता है। क्या मुझसे यहां कुछ गलत हो रहा है?डी में विनाशक से मॉड्यूल-स्तरीय फ़ंक्शंस को कॉल करना (एक आउटऑफमेरी एरर फेंकना प्रतीत होता है)

एक छीन नीचे परीक्षण का मामला:

logger.d

module main.logger; 
void log(const(char)[] msg) { 
    auto time = // GET TIME OF DAY SOMEHOW 
    std.stdio.writeln(std.conv.to!string(time) ~ " " ~ msg); 
} 

class.d

module main.class; 
import main.logger; 

class A { 
    public: 
     this() {} 
     ~this() { log("Destructor"); } 
} 
+0

हाँ आप हैं; आप त्रुटि को पुन: उत्पन्न करने के लिए न्यूनतम टेस्टकेस प्रदान किए बिना अस्पष्ट प्रश्न पोस्ट कर रहे हैं। कोई अपराध नहीं। – FeepingCreature

+0

मैं अभी एक छोटा टेस्ट केस चाबुक कर सकता हूं। –

उत्तर

4

कचरा कलेक्टर वर्तमान में फेंक दिया अपवादों या स्मृति आवंटन के अंतर्गत से कहा जाता है का समर्थन नहीं करता एक फाइनलाइज़र इस प्रकार, आप भरोसेमंद कुछ भी नहीं कर सकते जो आवंटन का कारण बनता है या एक वर्ग विनाशक के अंदर से एक अपवाद अपवाद फेंकता है।

+0

यह समझ में आता है कि लेखांकन में कुछ पृष्ठभूमि आवंटन हो सकते हैं। –

+0

समाधान: 'printf' का उपयोग करें। – BCS

+1

@ लॉग फ़ंक्शन में मार्क स्ट्रिंग कॉन्सटेनेशन आवंटन भी है – cybevnm

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