मेरे पास कई कक्षाएं हैं जिन्हें मैंने AngelScript इंजन से कनेक्ट किया है। इस इंजन वस्तुओं आवंटित करने के लिए दिलचस्प तरीके से उपयोग करता है: वस्तु को नष्ट करने केऑब्जेक्ट को कॉल करने के बराबर हटाएं (ऑब्जेक्ट)। ऑब्जेक्ट()
static void Constructor(ObjectType *thisPointer)
{
new(thisPointer) ObjectType();
}
और इस तरह कोड: यह स्मृति (संभवतः malloc()
के साथ) और जब लेखकों इस तरह निर्माण का उपयोग करने के लिए इस स्मृति में वस्तु बनाने के लिए प्रस्ताव की जरूरत राशि आवंटित :
static void Destructor(ObjectType *thisPointer)
{
thisPointer->~ObjectType();
}
मैं कई प्रश्न हैं:
- यह नाशक इस तरह से उपयोग करने के लिए सही तरीका है? (ग्रहण इसे एक बग के रूप में न्याय करता है) जहां तक मैं इस कोड को समझ सकता हूं, स्मृति को हटाने के बिना विनाशक को कॉल करना चाहिए (
free()
पर कॉल करना) - क्या इस निर्माण के बजाय
delete(thisPointer)
(या ऐसा कुछ) का उपयोग करना संभव है और यह होगा बराबर? (कम से कम यह कोड संकलन और रनटाइम के दौरान कोई त्रुटि नहीं देता है) - क्या स्मृति को हटाने के बिना विनाशक को कॉल करने के अन्य तरीके हैं?
अग्रिम धन्यवाद।
निर्माण और स्मृति प्रबंधन वास्तव में पूरी तरह से असंबंधित प्रक्रियाओं जो कर रहे हैं सी ++ munges new
में एक साथ और सुविधा के लिए delete
:
"नियुक्ति हटाने" की खोज के बाद [स्ट्रॉस्ट्रप: सी ++ स्टाइल एंड टेक्निक अकसर किये गए सवाल] (http://www2.research.att.com/~bs/bs_faq2.html#placement-delete) प्रश्न के संक्षिप्त उत्तर के साथ " क्या कोई "प्लेसमेंट डिलीट" है? " - "नहीं, लेकिन अगर आपको एक की जरूरत है तो आप अपना खुद का लिख सकते हैं।" शायद यह किसी की मदद करेगा। –