मैं आपकी प्रेरणा के प्रति आश्वस्त नहीं हूँ।
मुफ्त स्टोर पर आरएआईआई कक्षाएं बनाने के अच्छे कारण हैं।
उदाहरण के लिए, मेरे पास आरएआईआई लॉक क्लास है। मेरे पास कोड के माध्यम से एक रास्ता है जहां लॉक केवल तभी जरूरी है जब कुछ स्थितियां हों (यह एक वीडियो प्लेयर है, और मुझे केवल मेरे रेंडर लूप के दौरान लॉक पकड़ने की आवश्यकता है यदि मुझे वीडियो लोड हो गया है और खेल रहा है; अगर कुछ भी लोड नहीं हुआ है, मुझे इसकी आवश्यकता नहीं है)। मुफ्त स्टोर पर लॉक बनाने की क्षमता (scoped_ptr/auto_ptr के साथ) इसलिए बहुत उपयोगी है; यह मुझे एक ही कोड पथ का उपयोग करने की इजाजत देता है चाहे मुझे लॉक निकालना है या नहीं।
यानी कुछ इस तरह:
auto_ptr<lock> l;
if(needs_lock)
{
l.reset(new lock(mtx));
}
render();
यदि मैं केवल स्टैक पर ताले बना सकते हैं, मुझे लगता है कि .... नहीं कर सका
एक और मुद्दा यह है कि यह केवल श्रेणी के पदानुक्रम के बाहर से 'नया' कहलाता है। अर्थात।'एक्स' के सदस्य के लिए funciton को कॉल करना संभव है। नई सी ++ '0 एक्स फीचर "= डिलीट" आपको फ़ंक्शन को कभी भी कॉल करने से स्पष्ट रूप से रोकने की अनुमति देगी। –
रिचर्ड, नहीं, इन विधियों को कभी भी नहीं कहा जा सकता क्योंकि उन्हें केवल घोषित किया गया है लेकिन परिभाषित नहीं किया गया है। अंतर यह है कि निजी पहुंच एक कंपाइलर त्रुटि के बजाय एक लिंकर त्रुटि उत्पन्न करेगा। –
यह 'एक्स * एक्स = :: नया एक्स;' को रोकता नहीं है, जो स्पष्ट रूप से वैश्विक ऑपरेटर को कॉल करता है, न कि क्लास ऑपरेटर नया ... –