मैं कस्टम मेमोरी आवंटकों के साथ std::unique_ptr<T[]>
का उपयोग करने का प्रयास कर रहा हूं।std :: unique_ptr <T[]> और कस्टम आवंटक डिलीटर
void* Alloc(size_t size)
template<typename T> T* AllocArray(size_t count)
void Free(void* mem)
template<typename T> void FreeArray(T* arr, size_t count)
के बाद से अंतर्निहित स्मृति एक पूर्व आवंटित ब्लॉक से आ सकते हैं, मैं विशेष ...Array()
-methods जरूरत है और नि: शुल्क सरणियों: मूल रूप से, मुझे लगता है कि IAllocator
है, जो निम्नलिखित तरीके प्रदान की उपवर्गों हैं कस्टम allocators है , वे रेंज में प्रत्येक तत्व पर आवंटित/मुक्त मेमोरी आवंटित करते हैं और T()
/~T()
पर कॉल करते हैं। अब, जहाँ तक मुझे पता है, कस्टम deleters std::unique_ptr
के लिए हस्ताक्षर का उपयोग करें:
void operator()(T* ptr) const
unique_ptr<T[]>
के मामले में, सामान्य रूप से आप delete[]
कहेंगे और इसके साथ किया जाना है, लेकिन मैं, जिसके लिए FreeArray<T>
कॉल करनी होगी मुझे सीमा में तत्वों की संख्या की आवश्यकता है। केवल कच्चे सूचक को देखते हुए, मुझे लगता है कि सीमा के आकार को प्राप्त करने का कोई रास्ता नहीं है, इसलिए केवल एक चीज मैं के साथ आ सकता है यह है:
std::unique_ptr<T[], MyArrDeleter> somePtr(allocator.AllocArray<T>(20), MyArrDeleter(allocator, 20));
कहाँ अनिवार्य रूप से सरणी के आकार प्रदान किया जाने वाला है मैन्युअल रूप से हटाए गए ऑब्जेक्ट में। क्या ऐसा करने के लिए इससे अच्छा तरीका है? यह मुझे बहुत त्रुटि-प्रवण लगता है ...