2010-08-07 11 views
6

ptr_vector प्रतिलिपि बनाने योग्य और कॉपी असाइन करने योग्य है। अंतर्निहित वस्तुओं की गहरी प्रतिलिपि कैसे हो सकती है जब यह उनके ठोस प्रकारों को नहीं जानता?बढ़ावा कैसे देता है :: ptr_vector अंतर्निहित वस्तुओं की गहरी प्रतिलिपि बनाता है?

उत्तर

8

boost::ptr_vector कंटेनर का एक वैकल्पिक टेम्पलेट पैरामीटर, CloneAllocator है, जो क्लोनिंग नीति को परिभाषित करता है। डिफ़ॉल्ट आवंटक heap_clone_allocator है, जो किसी ऑब्जेक्ट को क्लोन करने के लिए कॉपी कन्स्ट्रक्टर को बस आमंत्रित करता है।

क्लोन आवंटन क्लोनिंग के आसपास संकेत की एक परत जोड़ने के तरीके के रूप में उपयोग किया जाता है। उदाहरण के लिए, यह आपको एक कस्टम आवंटक प्रदान करने की अनुमति देता है जो एक गैर-लोकप्रिय प्रकार के क्लोनिंग को सही तरीके से संभालता है।

आप the Boost Pointer Containers Library documentation में अधिक जानकारी प्राप्त कर सकते हैं, जो क्लोनबल और क्लोन ऑलोकेटर अवधारणाओं को बताता है।

+0

आह - इसलिए मुझे क्लोनबल अवधारणा का समर्थन करने की आवश्यकता है भले ही मेरी वस्तु प्रति-निर्माण योग्य हो? ऑब्जेक्ट नहीं होने पर दस्तावेज़ केवल क्लोनबल का उल्लेख करते हैं। –

+0

@ बिली: यह मेरी समझ है। मैंने 'ptr_vector' का व्यापक रूप से उपयोग नहीं किया है, लेकिन इस तरह अन्य पॉइंटर कंटेनर मैंने हैंडल क्लोनिंग का उपयोग किया है। –

+0

@ बिली: क्लोनबल आवश्यकता के आसपास पहुंचने के लिए आप 'heap_clone_allocator' के बजाय' view_clone_allocator' का भी उपयोग कर सकते हैं। फिर 'new_clone()' के लिए कोई अधिभार की आवश्यकता नहीं है। जाहिर है आप कंटेनरों को गहरी प्रतिलिपि नहीं बना सकते हैं। –

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