में आवंटकों का उपयोग कैसे करें http://en.cppreference.com/w/cpp/memory/allocator में जो मैंने पढ़ा है, उससे आवंटकों की अधिकांश सुविधाएं अब बहिष्कृत की जा रही हैं। सवाल यह है कि, नए कोड में आवंटकों का उपयोग कैसे किया जाता है? अब "सही" तरीका क्या है?आधुनिक सी ++
जो मैं प्रलेखन में कटौती करता हूं, उससे construct
ऑलोकेटर के बजाए आवंटन लक्षणों का हिस्सा है।
मैं एक कस्टम कंटेनर बना रहा हूं, यहां यह कन्स्ट्रक्टर का एक बहुत ही सरल संस्करण है, क्या यह नए डिजाइन का अच्छा उपयोग है?
container::container(std::size_t size, T const& value, Allocator const& allocator) : allocator_(allocator){
data_ = std::allocator_traits<Alloc>::allocate(allocator_, size);
for(auto ptr = data_; ptr != data_ + size; ++ptr){
std::allocator_traits<Allocator>::construct(allocator_, ptr, value)
}
}
मैं पाश में एक एल्गोरिथ्म (जैसे std::for_each
) का उपयोग करने की कोशिश की, लेकिन मैं पते (operator&
) लेने के बिना उपयोग करने के लिए प्रबंधन नहीं किया।
मुझे आधुनिक आवंटक का पूरा उदाहरण कहां मिल सकता है?
कुछ फेरबदल के बाद, मैं कच्चे पाश (जो करने के लिए एक निष्पादन नीति पारित किया जा सकता है) के बजाय एक एल्गोरिथ्म का उपयोग करने के लिए एक रास्ता मिल गया। मैं बहुत यकीन नहीं है, लेकिन यह इस हो सकता है:
data_ = std::allocator_traits<Allocator>::allocate(allocator_, size);
std::for_each([policy? deduced from allocator?,]
boost::make_counting_iterator(data_),
boost::make_counting_iterator(data_ + size),
[&](auto ptr){std::allocator_traits<Allocator>::construct(allocator_, ptr, value);}
);
सी ++ 11 के बाद ऐसा करने का यह सही तरीका रहा है (मॉड्यूलो 'लूप स्थिति के लिए टूटा हुआ')। सी ++ 17 उन कार्यों के समूह को कम करने के अलावा कुछ भी नहीं बदलता है जिन्हें आपको वैसे भी कॉल नहीं करना चाहिए। इसके अलावा, कोई 'construct_n' नहीं है। –
"* जो मैंने पढ़ा है http://en.cppreference.com/w/cpp/memory/allocator में, आवंटकों की अधिकांश विशेषताएं अब बाहर छीनने और बहिष्कृत होने जा रही हैं। *" सुधार: यह नहीं है "बहिष्कृत " माध्यम। बहिष्कृत का मतलब "छीन लिया" नहीं है। इसका मतलब है "एक * बाद के संस्करण * में हटाने के अधीन"। यह अभी तक कहीं नहीं चला है। –
@ टी.सी., मैंने कोड (लूप) को सही किया।लूप लिखने का सही तरीका क्या होगा (उदाहरण के लिए कि कोई निष्पादन नीति दे सकता है, 'std :: for_each'? (क्या)। – alfC