इसी तरह की वैधानिकता के लिए delete this
, this
जहां तक मुझे पता है , प्लेसमेंट नया भी अनुमति है। इसके अलावा, इसके बारे में this
, या अन्य पूर्व-मौजूदा संकेत / संदर्भ बाद में उपयोग किए जा सकते हैं, कुछ प्रतिबंध हैं:
[Basic.life]
यदि, किसी वस्तु का जीवनकाल समाप्त हो गया है और भंडारण से पहले जिस वस्तु पर कब्जा कर लिया गया है, उसका पुन: उपयोग या विमोचन किया जाता है, भंडारण स्थान पर एक नई वस्तु बनाई जाती है, जिस पर मूल वस्तु का कब्जा होता है, एक संकेतक जो मूल वस्तु की ओर इशारा करता है, एक संदर्भ मूल वस्तु के लिए संदर्भित, या मूल वस्तु का नाम स्वचालित रूप से नई वस्तु को संदर्भित करेगा और, एक बार जब नई वस्तु का जीवनकाल शुरू हो गया है, तो इसका उपयोग नई वस्तु में हेरफेर करने के लिए किया जा सकता है, यदि:
- नई ऑब्जेक्ट के लिए संग्रहण वास्तव में उस संग्रहण स्थान को ओवरले करता है जिस पर मूल ऑब्जेक्ट का कब्जा है, और
- नई वस्तु मूल वस्तु (शीर्ष स्तर के cv-क्वालीफायर की अनदेखी) के समान प्रकार की है, और
- मूल वस्तु का प्रकार कॉन्स्टेबल-योग्य नहीं है, और, यदि एक वर्ग प्रकार, में कोई गैर-स्थैतिक डेटा सदस्य नहीं है, जिसका प्रकार कॉन्स्ट-योग्य या एक संदर्भ प्रकार है, और
- न तो मूल वस्तु और न ही नई वस्तु एक संभावित अतिव्यापी उप-विषय ([intro.object]) है।
इस उदाहरण में पहले दो संतुष्ट हैं, लेकिन अंतिम दो को ध्यान में रखना होगा।
तीसरे बिंदु के संबंध में, यह देखते हुए कि फ़ंक्शन गैर-कॉन्स्टेबल-योग्य है, यह मान लेना काफी सुरक्षित होना चाहिए कि मूल ऑब्जेक्ट नॉन-कॉस्ट है। यदि कॉलर को हटा दिया गया है तो गलती कॉलर की तरफ है। कॉन्स्टेबल / रेफरेंस मेंबर के बारे में, मुझे लगता है कि यह जाँच कर बताया जा सकता है कि यह असाइन करने योग्य है:
static_assert(std::is_trivial_v<A> && std::is_copy_assignable_v<A>);
बेशक, चूंकि असाइनमेंट एक आवश्यकता है, आप इसके बजाय बस उपयोग कर सकते हैं *this = {};
जो मैं उसी कार्यक्रम का उत्पादन करने की उम्मीद करूंगा। एक और अधिक दिलचस्प उपयोग का मामला *this
किसी अन्य प्रकार की वस्तु के लिए मेमोरी का पुन: उपयोग करने के लिए हो सकता है (जो उपयोग करने के लिए आवश्यकताओं को विफल कर देगा this
, कम से कम रीइन्टरप्रिटिंग + लॉंडरिंग के बिना)।
delete this
प्लेसमेंट नए के समान , this
शायद ही "सुरक्षित" के रूप में वर्णित किया जा सकता है।