2013-09-25 23 views
5

वेक्टर निर्मातावेक्टर में आवंटक क्यों है?

const allocator_type& alloc = allocator_type() 

के हर प्रकार में इस है यह क्यों const है? मैं नहीं देख सकता कि यह कैसे उपयोगी होगा। मैं एक आवंटक में गुज़रने देख सकता हूं ताकि एकाधिक वैक्टर एक ही पूल साझा कर सकें लेकिन वेक्टरों के दूसरे समूह से दूर हो जाएं। हालांकि कॉन्स के साथ इसका मतलब यह नहीं होगा कि वे केवल इंस्टेंस डेटा कॉपी करेंगे? एक पूल की प्रतिलिपि बनाना या जो भी हो वह उपयोगी नहीं लगता है।

यह क्यों है?

+3

आप हमेशा एक आवंटक प्राप्त कर सकते हैं जो केवल पूल (shared_ptr?) के संदर्भ को संग्रहीत करता है, इसलिए प्रतिलिपि ठीक है। –

+1

एक आवंटक! = एक पूल। इसलिए एक आवंटक की प्रतिलिपि तार्किक रूप से पूल की प्रतिलिपि बनाने का संकेत नहीं देती है। आपका तर्क अमान्य है :) – sehe

+0

@sehe: ठीक है आप हैं! इससे मुझे हंसी मिली – user2814152

उत्तर

4

दरअसल, आवंटक को const संदर्भ के रूप में पास करना और कंटेनर के अंदर इसे कॉपी करना चीजों को सरल बनाता है। अन्यथा यदि केवल एक संदर्भ पारित किया गया था, तो आपको यह सुनिश्चित करना होगा कि कंटेनर से पहले आवंटक नष्ट नहीं किया गया हो। आपको बस अपनी प्रतियों के बीच आवंटक राज्य साझा करने की आवश्यकता है। आप बस shared_ptr में पूल धारण करके ऐसा कर सकते हैं।

+1

@ जुजज ब्लाहो: विकिपीडिया है, मुझे डर है, पुराना है। जबकि सी ++ 98 (और सी ++ 03) की आवश्यकता होती है कि किसी दिए गए प्रकार के आवंटक का उदाहरण उसी प्रकार के आवंटक के किसी भी अन्य उदाहरण के बराबर हो, सी ++ 11 आवंटकों में * मूल्य * अर्थशास्त्र (और राज्य)। –

4

आवंटकों को मूल्य अर्थशास्त्र माना जाता है, जिसका अर्थ है कि वेक्टर इसे मूल्य से संग्रहीत करता है (ध्यान दें कि get_allocator() मूल्य से लौटाता है)। तो कन्स्ट्रक्टर आसानी से कॉन्स संदर्भ द्वारा आवंटक ले सकता है और बस इसे कॉपी कर सकता है।

+0

मैं काफी उलझन में हूं कि यह क्यों कम हो गया था। – sehe

+0

@sehe तो मैं हूं। लेकिन दुर्भाग्यवश, टिप्पणी का अनुरोध करने का कोई तरीका नहीं है। – Angew

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