इस संदर्भ में T
एक निश्चित प्रकार है और allocator
उस प्रकार के लिए आवंटक ऑब्जेक्ट है। डिफ़ॉल्ट रूप से यह std::allocator<T>
है लेकिन यह आवश्यक नहीं है।क्या एक आवंटक। कन्स्ट्रक्ट लूप बराबर std :: uninitialized_copy है?
मेरे पास allocator.allocate(n)
द्वारा प्राप्त स्मृति का एक हिस्सा है। मेरे पास T
ऑब्जेक्ट्स (कहें, std::vector<T>
) का कंटेनर भी है। मैं T
ऑब्जेक्ट (ओं) के साथ स्मृति के उस खंड को प्रारंभ करना चाहता हूं।
स्मृति के खंड का स्थान T* data
में संग्रहीत किया जाता है।
क्या ये दो कोड उदाहरण हमेशा समान हैं?
#include <memory>
// example 1
std::uninitialized_copy(con.begin(), con.end(), data)
// example 2
std::vector<T>::const_iterator in = con.begin();
for (T* out = data; in != con.end(); ++out, ++in) {
allocator.construct(out, *in);
}
और इन दोनों के लिए?
#include <memory>
T val = T(); // could be any T value
// example 3
std::uninitialized_fill(data, data + n, val)
// example 4
for (T* out = data; out != (data + n); ++out) {
allocator.construct(out, val);
}
मुझे लगता है कि allocator.address पैरामीटर के रूप में एक ऑब्जेक्ट (या एक संदर्भ) लेता है (std :: आवंटक बस करता है और x)। यह अंतिम आवंटित पता वापस नहीं करता है, जैसा कि आपको लगता है। –
@ क्रिस्टियन राउ: वूप्स, मुझे अपने कोड के अनुसार संपादित करने दें। – orlp
जब आप समान कहते हैं, तो क्या आपका मतलब आवंटित और प्रारंभिक स्मृति, या प्रदर्शन के संबंध में, या पूरी तरह से कुछ और के संबंध में है? – steveo225