2009-01-21 8 views
6

सी ++ के लिए कचरा कलेक्टर क्या उपलब्ध हैं? क्या आप उनमें से किसी का उपयोग कर रहे हैं? क्या परिणाम के साथ?सी ++ के लिए कचरा कलेक्टर क्या उपलब्ध हैं?

+0

सामान्य मामले में कचरा कलेक्टर की कोई आवश्यकता नहीं है क्योंकि सी ++ स्मार्ट पॉइंटर्स बेहतर हैं और निर्धारक विनाश देते हैं। यदि आपके पास कचरा संग्रहण के लिए एक विशेष "केस का उपयोग करें" है तो शायद हम इस सवाल का अधिक विचारपूर्वक जवाब दे सकते हैं। –

+0

@ मार्टिन - आपकी टिप्पणी एक उत्तर की तरह दिखती है। आपको इसे पोस्ट करना चाहिए ताकि लोग इसे सही तरीके से वोट दे सकें। – Aaron

+0

बोहेम ने जीसी (2004 आईआईआरसी, जब स्मार्ट पॉइंटर्स अच्छी तरह से जाना जाता था) पर आईएसओ सी ++ कमेटी के लिए एक प्रेजेंटेशन दिया है, ऐसा लगता है कि मार्टिन की राय को तथ्य के रूप में नहीं बताया जाना चाहिए। – MSalters

उत्तर

6

Boost लाइब्रेरी में कुछ साझा_प्टर सामग्री शामिल हैं जो मूल रूप से कचरा कलेक्टर की गणना करने वाले संदर्भ के रूप में कार्य करती हैं। यदि आप C12+ डिज़ाइन के RAII सिद्धांत को गले लगाते हैं, तो और auto_ptr "कचरा कलेक्टर" के लिए आपकी आवश्यकता को भर देगा।

+1

यदि आप चक्रीय संदर्भों को मॉडल करने में सक्षम होना चाहते हैं। –

+0

@DanielEarwicker: वास्तव में बूस्ट में कमजोर_ptr भी है, इसे संबोधित करने के लिए। –

+0

@ जोसेफ गारविन ट्रू - लेकिन फिर आपको सही चुनना होगा। जीसी के साथ, आप नहीं करते (ओपी ने यही पूछा है)। –

4

एकमात्र जिसे मैंने व्यक्तिगत रूप से सुना है Boehm garbage collector मुझे यकीन है कि अन्य मौजूद हैं, लेकिन मैंने उनसे निपटा नहीं है (या उन्हें भी देखा है)।

5

कई सी ++ जीसी सूचीबद्ध हैं on wikipedia

हालांकि, मैं किसी का भी उपयोग नहीं करता, आरएआईआई भी मेरा मित्र है।

5

बोहेम कचरा कलेक्टर सी के लिए बहुत अच्छा है, लेकिन सी ++ के तहत उपयोग करना मुश्किल है। http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html पर "सी ++ इंटरफ़ेस" अनुभाग देखें।

मेरी राय यह है कि यदि आपको कचरा संग्रहण की आवश्यकता है, तो उस लंगेज का चयन करें जिसमें इसे अंतर्निहित बनाया गया है।

सर्कुलर निर्भरताओं से निपटने के साथ सी ++ के लिए सबसे अच्छा सामान्य समाधान साझा पॉइंटर्स (उदाहरण के लिए बढ़ावा से) है। दो चीजें आप कर सकते हैं: 1. डिजाइन कोई परिपत्र निर्भरता 2. डिजाइन एक 'Linch पिन' उस चक्र टूट जाता है वस्तुओं

या तो आप असली के साथ सौदा के उद्धार के लिए अनुमति देने के साथ बात के साथ बात खराब, गठबंधन, सी ++ के लिए कचरा कलेक्टर के साथ समस्याओं को डीबग करना मुश्किल है या जब आप उनके साथ काम करते हैं तो आप अपनी वस्तुओं को मुक्त करने की सरल शास्त्रीय समस्या से निपटते हैं।

2

हमेशा है, अहम: C++/CLI - .NET Framework के लिए C++। वहाँ बहुत अच्छा कचरा संग्रह। : पी

हालांकि, ईमानदार होने के लिए, वे वहां मौजूद सभी वाक्य रचनात्मक चीनी के साथ, आप लगभग पूरी तरह से एक नई भाषा मान सकते हैं जो सी/सी ++ के साथ काफी अच्छी तरह से काम करने के लिए होता है।

यदि आप किसी भाषा के रूप में सी ++ से विवाहित नहीं हैं, तो आप D पर भी देख सकते हैं, जो मूल कोड जैसे सी ++ (और सी ++/सीएलआई के विपरीत) में संकलित होता है लेकिन इसमें कचरा संग्रह भी होता है।

2

आप कई कार्यान्वयन here पा सकते हैं। मैंने कभी भी उनमें से किसी की कोशिश नहीं की है और आम तौर पर मुझे एक गैर-निर्धारक जीसी मिलती है जो अच्छे से ज्यादा नुकसान पहुंचाती है।

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