के साथ आवंटित वस्तुओं के लिए कन्स्ट्रक्टर तर्कों को पारित करना यह एक शर्मनाक सवाल है, लेकिन boost.interprocess के साथ प्रदान किए गए अच्छी तरह से लिखित दस्तावेज भी मेरे लिए पर्याप्त नहीं है यह करने के लिए।सी ++ आवंटकों, विशेष रूप से बूस्ट :: इंटरप्रोसेस :: cached_adaptive_pool
क्या मैं एक cached_adaptive_pool संभाजक उदाहरण है, और मैं निर्माता मानकों के साथ गुजर इसका इस्तेमाल करने के लिए एक वस्तु का निर्माण करना चाहते हैं,:
struct Test {
Test(float argument, bool flag);
Test();
};
// Normal construction
Test obj(10, true);
// Normal dynamic allocation
Test* obj2 = new Test(20, false);
typedef managed_unique_ptr<
Test, boost::interprocess::managed_shared_memory>::type unique_ptr;
// Dynamic allocation where allocator_instance == cached_adaptive_pool,
// using the default constructor
unique_ptr obj3 = allocator_instance.allocate_one()
// As above, but with the non-default constructor
unique_ptr obj4 = allocator_instance ... ???
यह बहुत अच्छी तरह से उपयोग के बारे में मेरी ओर से एक विफलता हो सकता है सामान्य रूप से आवंटक वस्तुओं। लेकिन किसी भी मामले में, मैं इस ऑब्जेक्ट को कन्स्ट्रक्टर तर्क पास करने के लिए cached_adaptive_pool में निर्दिष्ट इंटरफ़ेस के साथ इस विशिष्ट आवंटक का उपयोग कैसे नहीं कर सकता।
cached_adaptive_pool
में विधि है: void construct(const pointer & ptr, const_reference v)
लेकिन मुझे समझ में नहीं आता कि इसका क्या अर्थ है और मुझे इसका उपयोग उदाहरण नहीं मिल रहा है।
मेरा सिर पूरे दिन टेम्पलेट्स में तैर रहा है, इसलिए मदद करने वाला हाथ, भले ही उत्तर स्पष्ट है, की सराहना की जाएगी।
धन्यवाद। पहला रूप मुझे जिस प्रकार का उत्तर था, वह बहुत ही उलझन में था और खुद को महसूस करने के लिए थक गया था। दूसरा फॉर्म 'a.construct (पी, 30, सत्य) 'इस विशिष्ट बूस्ट आवंटक द्वारा समर्थित नहीं प्रतीत होता है। कष्टप्रद पर्याप्त है, क्योंकि 'cached_adaptive_pool.construct() 'रिटर्न' शून्य 'है, मुझे' allocator_t :: पॉइंटर obj = allocator.allocate_one() लिखना है; allocator.construct (obj, टेस्ट (30, सच)) '? मुझे यकीन नहीं है कि क्या एक बुरा ऑपरेशन के लिए दो बयानों का उपयोग करके या कुछ हद तक अजीब लग रही प्लेसमेंट का उपयोग करके और भी बदतर है। – porgarmingduod
आप इसे एक अलग कार्य कर सकते हैं। – UncleBens