2015-09-23 13 views
8

में मेमोरी को सही ढंग से आवंटित करें मैं प्रोग्रामिंग अभ्यास के रूप में std::vector को लागू करने की कोशिश कर रहा हूं।वेक्टर

पर विचार करें निम्नलिखित कोड का टुकड़ा:

template <class T, class Allocator = std::allocator<T>> 
class vector 
{ 
public: 
    using size_type = size_t; 
    using allocator_type = Allocator; 
    ... 
private: 
    T* m_data; 
    allocator_type m_alloc; 
    size_type m_capacity; 
    ... 
}; 

m_data टाइप T* है। मुझे std::allocator_traits<allocator_type>::allocate(m_alloc, m_capacity) का उपयोग करके स्मृति आवंटित करने की आवश्यकता है जो std::allocator_traits<allocator_type>::pointer देता है।

मैं मान सकते हैं कि pointer परोक्ष T* लिए डाली जा सकती है और allocate से m_data को लौट मूल्य निर्दिष्ट?

यदि नहीं, vector में मेमोरी सही ढंग से आवंटित करने के लिए कैसे करें?

+0

आप अपना खुद का आवंटक बना सकते हैं। –

+0

संबंधित: http://stackoverflow.com/q/28521203/ – dyp

उत्तर

7

आपको अपना m_data सदस्य Allocator::pointer बनाना चाहिए। (यदि आप मानक इंटरफ़ेस का पालन करना चाहते हैं, तो आपको शायद अपने वेक्टर में उस प्रकार का स्थानीय उपनाम बनाना चाहिए।)

इस प्रकार का प्रकार है क्योंकि कुछ आवंटक कच्चे पॉइंटर्स में सौदा नहीं करते हैं, जैसे Boost.Interprocess साझा किया गया मेमोरी आवंटक, जो कॉन्फ़िगरेशन के आधार पर स्मार्ट पॉइंटर्स का उपयोग कर सकता है।

+0

यदि मैं 'm_data' को 'आवंटक :: सूचक' के रूप में परिभाषित करता हूं, तो' std :: vector :: data() 'फ़ंक्शन वापसी क्या होनी चाहिए? इसका रिटर्न प्रकार 'टी *' है। – Hrant

+0

@ हंट आपको 'std :: addressof (* m_data)' वापस करना चाहिए –