तो मैं पीआईएमपीएल और आवंटन ढेर के बारे में सोच रहा हूं। मैं एक पुस्तकालय लिख रहा हूं और कक्षा के निजी सदस्य को छिपाने के लिए पीआईएमपीएल का उपयोग करने का फैसला किया। इसका मतलब है कि मेरे पास इसपीआईएमपीएल और स्टैक आवंटन
class Foo {
private:
class Handle;
std::tr1::shared_ptr<Handle> handle;
public:
Foo();
};
की तरह घोषित कक्षा होगी, यह बहुत सीधी आगे है। लेकिन फिर निर्माता में आप इस
Foo::Foo() : handle(new Handle()) {}
तो जब मेरे पुस्तकालय का उपयोग कर किसी स्टैक पर एक फू बनाता है, वे अनिवार्य रूप से एक ढेर आवंटन वैसे भी कर रहे हैं है। क्या यह व्यापार-बंद है जिसे आप पीआईएमपीएल का उपयोग करते समय जीते हैं? मैंने प्रलेखकों के बगल में एक चेतावनी के साथ दस्तावेज़ीकरण जारी करने का विचार किया: "चेतावनी: यह एक ढेर आवंटन में परिणाम" या somesuch।
मेरा दूसरा विचार था कि सभी वर्गों को शुद्ध वर्चुअल इंटरफेस और स्मार्ट पॉइंटर्स लौटने वाले स्थैतिक फैक्ट्री विधियों के पूरे समूह के रूप में कार्यान्वित किया गया हो। इसका मतलब ढेर आवंटन भी है लेकिन इसमें कोई चाल नहीं है।
कोई विचार या सुझाव? क्या मैं अपनी लाइब्रेरी का उपयोग कर प्रोग्रामर के अत्यधिक विचारशील हूं?
ऐसी चेतावनी के साथ समस्या यह है कि बड़ी संख्या में संचालन के परिणामस्वरूप ढेर आवंटन होते हैं। 'Std :: vector' बनाना भी यह करता है। या एक का आकार बदलना। ट्रेडऑफ यह है कि कक्षा के आंतरिक भाग को छिपाना कितना महत्वपूर्ण है, बनाम हेप आवंटन से बचने के अतिरिक्त प्रदर्शन। – jalf