मैं जानना चाहता हूं कि section 11.14 of the C++-FAQ-lite को सरणी में कैसे अनुकूलित करें।आप ओवरलोडेड पूल ऑपरेटर को कैसे घोषित करते हैं और उपयोग करते हैं?
class Pool {
public:
void* allocate(size_t size) {...}
void deallocate(void* p, size_t size) {...}
};
void* operator new[](size_t size, Pool& pool) { return pool.allocate(size); }
void operator delete[](void* p, size_t size, Pool& pool) { pool.deallocate(p, size); }
struct Foo {...};
int main() {
Pool pool;
Foo* manyFoos = new (pool) Foo [15];
/* ... */
delete [] (pool) manyFoos;
}
हालांकि, मैं घोषणा और इस operator delete[] (pool)
कॉल करने के लिए सही सिंटैक्स यह पता लगाने की नहीं कर पाए हैं:
असल में, मैं कुछ इस तरह चाहते हैं। क्या कोई यहां मदद कर सकता है?
क्षमा करें, मुझे यह नहीं मिला। यह कथन 'एकाधिक फ़ूज़' सरणी को कैसे हटाता है? और संकलक कैसे 'ऑपरेटर हटाएं []' को कॉल करने के लिए जानता है, 'ऑपरेटर हटाएं' नहीं? – Tobias
@ टोबियास: मेरे पास एक टाइपो था। फिक्स्ड पोस्ट – dirkgently
@Tobias: प्लेसमेंट फॉर्म का उपयोग करते समय आपको यह करने की ज़रूरत होती है कि संकलक अन्यथा स्वचालित रूप से आपके लिए क्या करता है - 1) ऑब्जेक्ट पर dtor को कॉल करें 2) स्मृति को मुक्त करें। कोड की पहली पंक्ति # 1 का ख्याल रखती है। अब, दूसरी पंक्ति, 'पूल' के उस हिस्से को मुक्त करने का ख्याल रखती है जहां आपकी सरणी वस्तुएं आईं। – dirkgently