क्या सी ++ में संरक्षित और निजी विनाशक के बीच कोई अंतर है? यदि आधार वर्ग विनाशक निजी है, तो मुझे लगता है कि व्युत्पन्न वर्ग वस्तु को हटाते समय इसे अभी भी बुलाया जाता है।संरक्षित बनाम निजी विनाशक
उत्तर
से here:
लिया तो निर्माता/नाशक के रूप में निजी, तो वर्ग instantiated नहीं किया जा सकता है घोषित किया जाता है।
यह सच है, हालांकि इसे कक्षा में किसी अन्य विधि से तुरंत चालू किया जा सकता है। इसी प्रकार, यदि विनाशक private
है, तो ऑब्जेक्ट केवल कक्षा के अंदर से ही हटाया जा सकता है। साथ ही, यह वर्ग को विरासत में रखने से रोकता है (या कम से कम, विरासत वर्ग को तत्काल/नष्ट होने से रोकें)।
सार्वजनिक वर्ग ए {निजी ए() {} सार्वजनिक ए getA() {वापसी नया ए(); }} बिल्कुल सही नहीं है। –
यह सच नहीं है। निजी विनाशक के साथ वस्तु * * तत्काल हो सकता है, (उदाहरण के लिए, एक दोस्त समारोह के अंदर एक ढेर पर)। – SadSido
राइट आवंटित नहीं किया जा सकता है लेकिन आवंटित ढेर और मित्र कार्यों से भी ... –
यदि बेस क्लास विनाशक private
या protected
है तो आप बेस-क्लास पॉइंटर के माध्यम से delete
पर कॉल नहीं कर सकते हैं।
बेस-क्लास पॉइंटर के माध्यम से व्युत्पन्न ऑब्जेक्ट के विनाश को रोकने के लिए संरक्षित विनाशक का उपयोग करें। यह व्युत्पन्न कक्षाओं के विनाशक तक पहुंच सीमित करता है। और यह कक्षा बेस के स्वचालित (ढेर) वस्तुओं को रोकता है।
अपने आपमें यह प्रयोग किया जाता है किसी भी अन्य बहुरूपी व्युत्पन्न वर्गों के संकेत के माध्यम से आधार के लिए उपयोग करने की अनुमति के लिए, लेकिन नहीं उपयोगकर्ताओं इस तरह के एक सूचक का उपयोग कर नष्ट करने के लिए अनुमति देते हैं। उदाहरण: - सार बेस कक्षाएं/इंटरफेस।
लेकिन एक protected
, non-virtual
नाशक एक बग होने की प्रतीक्षा में हो रहा है। मान लें कि आप destroy()
फ़ंक्शन प्रदान नहीं करते हैं, आपको अंततः डाटर सार्वजनिक करना होगा। जैसे ही आप ऐसा करते हैं, क्लास पर आपका कोई और नियंत्रण नहीं होता है, और यदि कोई आपकी कक्षा से आगे निकलता है, तो गैर-वर्चुअल डॉटर के साथ पॉलिमॉर्फिक विलोपन का जोखिम चलाता है।
कोड का निम्न भाग संकलक त्रुटि (VC2010) में परिणाम होगा: C2248: 'आधार :: ~ आधार': निजी सदस्य वर्ग 'आधार' में घोषित
class base
{
~base(){}
};
class derived : public base
{
};
int main()
{
derived* d = new derived;
delete d;
}
हालांकि उपयोग नहीं कर सकते, अगर आप आधार विनाशक को संरक्षित करने के लिए बदलते हैं, सब कुछ ठीक काम करता है।
लेकिन यदि आपने इसे 'संरक्षित' में बदल दिया है, तो भी आप बेस क्लास पॉइंटर के माध्यम से वस्तुओं को नष्ट नहीं कर सके। (उस स्थिति में यह 'आभासी', बीटीडब्लू भी होना चाहिए।) जो कुछ हद तक व्युत्पन्न के कई उद्देश्यों को हरा देता है ... – sbi
उत्तर यह है कि आपकी धारणा गलत है। बेस क्लास विनाशक को निजी नहीं होने पर बुलाया जा सकता है।
- 1. संरक्षित कन्स्ट्रक्टर बनाम शुद्ध आभासी विनाशक
- 2. सी ++, संरक्षित अमूर्त वर्चुअल बेस शुद्ध आभासी निजी विनाशक
- 3. निजी या संरक्षित चर?
- 4. संरक्षित/निजी विरासत कास्टिंग
- 5. निजी और संरक्षित सदस्य: सी ++
- 6. रूबी में निजी/संरक्षित ब्लॉक?
- 7. स्कोप निजी, संरक्षित, और सार्वजनिक
- 8. निजी [यह] बनाम निजी
- 9. सी # संरक्षित क्षेत्र निजी, संपत्ति जोड़ें - क्यों?
- 10. डॉक्सीजन: छुपाएं निजी/संरक्षित विधि ... और टिप्स
- 11. निजी या संरक्षित विरासत में वर्चुअल फ़ंक्शन
- 12. सी ++ कक्षाएं (सार्वजनिक, निजी, और संरक्षित)
- 13. PHP कक्षा Constants - सार्वजनिक, निजी या संरक्षित?
- 14. क्या संरक्षित विनाशक वर्चुअल बनाने के लिए कोई उपयोग है?
- 15. निजी कीवर्ड बनाम कोई निजी कीवर्ड
- 16. ब्लॉक बनाम निजी तरीकों?
- 17. संरक्षित आंतरिक गुण बनाम संरक्षित गुण और Resharper
- 18. क्यों विज़ुअल सी ++ 6 निजी विनाशक पर शिकायत करता है
- 19. मैं share_ptr से निजी विनाशक कैसे कॉल कर सकता हूं?
- 20. विनाशक
- 21. विनाशक
- 22. अनाम वैरिएबल बनाम निजी चर
- 23. संरक्षित विरासत
- 24. वस्तु उन्मुख प्रोग्रामिंग में सार्वजनिक, निजी और संरक्षित क्या हैं?
- 25. PHP में 'संरक्षित' या 'निजी' का उपयोग क्यों न करें?
- 26. निजी/संरक्षित तरीकों के इनपुट को सुरक्षित करना?
- 27. हमें निजी या संरक्षित का उपयोग कब करना चाहिए?
- 28. "निजी" और "संरक्षित आंतरिक" के बीच क्या अंतर है?
- 29. कौन सा बेहतर है? निजी स्थिर बनाम निजी
- 30. डाइलिब विनाशक को
आपको निजी विनाशक के साथ कक्षा से प्राप्त कुछ समस्याएं हो सकती हैं =) – SadSido
http://stackoverflow.com/questions/631783/what-is-the-use-of-having-destructor-as-private के लिए डुप्लिकेट ? – SadSido
इसी तरह का सवाल यहां: http://stackoverflow.com/questions/224966/private-and- संरक्षित-members-c – Jordan