अन्य ने मॉड्यूल स्तर के विनाशकों का उल्लेख किया है, लेकिन यह वास्तव में व्यावहारिक नहीं है क्योंकि इसे बहुत अधिक मैन्युअल रखरखाव की आवश्यकता है, और डी में एक परेशान क्विर्क स्थिर रचनाकारों/विनाशकों के साथ मॉड्यूल थे, चक्रीय आयात नहीं हो सकते हैं। उदाहरण के लिए:
मॉड्यूल एक
module A;
import B;
static ~this() {}
void main() {}
मॉड्यूल बी को चलाने के लिए
module B;
import A;
static ~this() {}
प्रयास करें ...
% dmd A.d B.d
% ./A
Cycle detected between modules with ctors/dtors:
A -> B -> A
[email protected]/rt/minfo.d(331): Aborting!
डी करता है बस अगर आपके विनाशक एक-दूसरे पर निर्भर होते हैं, तब भी जब वे नहीं करते हैं। यह आपको इस गैर-समस्या के आसपास काम करने के लिए अपने कोड के अजीब "रिफैक्टरिंग" करने के लिए मजबूर करता है। डी को बताने का कोई तरीका नहीं है कि वास्तव में निर्भरता नहीं है।
संसाधन विनाश को संभालने का एक बेहतर समाधान जितना संभव हो सके कोशिश करना और गुंजाइश करना है। ऐसे वैश्विक संसाधन नहीं हैं जिनके लिए विनाश की आवश्यकता है, और किसी भी चीज़ के लिए क्लास फ़ाइनलाइजर्स पर भरोसा न करें, क्योंकि कभी भी (जावा में एक ही समस्या है) चलाने की गारंटी नहीं है।
वैकल्पिक रूप से, बस सी में किए गए काम करें: मैन्युअल शटडाउन। यह थोड़ा और काम है, लेकिन वास्तव में एक बड़ी समस्या नहीं है। चक्रीय आयात के साथ कुश्ती से यह निश्चित रूप से आसान है।
स्रोत
2012-05-27 14:53:20
** सी ++ ** में अनचाहे अपवादों के मामले में एक समान परिदृश्य है। –
@ के-बॉलो: सही, लेकिन * सामान्य * आवेदन निकास के दौरान, मुझे यह गारंटी नहीं मिल रही है कि मेरी सभी वस्तुओं को नष्ट कर दिया जाएगा। यह काफी असुविधाजनक है। –
@TravisGockel क्या आप पृष्ठ संख्या को शामिल करने के लिए प्रश्न संपादित कर सकते हैं? – Arlen