2012-11-16 37 views
7

जारी करें मैं कुछ DirectX11 संसाधनों का प्रबंधन करने के लिए कॉमप्रेट (माइक्रोसॉफ्ट :: डब्लूआरएल) का उपयोग कर रहा हूं। मैं मैन्युअल रूप से इसे कैसे जारी कर सकता हूं?मैन्युअल रूप से कॉमप्रेट

अगर मैं सही ढंग से समझता हूं, तो "रिलीज एंड गेट एड्रेसऑफ" विधि केवल पॉइंटर को मुक्त करती है, न कि संसाधन स्वयं (जो वापस आती है), और मुझे "रीसेट" विधि के बारे में निश्चित नहीं है।

केवल विकल्पों मैं के बारे में सोच सकता है मैन्युअल रूप से सूचक नाशक बुला रहे हैं, या "ReleaseAndGetAddressOf" बुला "रिलीज़" उस पर है, जो मैं से बचने के लिए चाहते हैं से कच्चे सूचक प्राप्त करने के बाद।

+0

रिलीज एंडGetAddressOf() का आपका विवरण गलत है। यह संसाधन जारी करता है, और लपेटा पॉइंटर का पता देता है जहां आप एक और सूचक मूल्य स्टोर कर सकते हैं। "उस पर कॉलिंग रिलीज" लिखा जाना चाहिए "मेरे प्रोग्राम को क्रैश करने के लिए, अब-लटकते पॉइंटर पर कॉलिंग रिलीज" लिखा जाना चाहिए। –

उत्तर

16

WRL के लिए स्रोत कोड प्रदान किया गया है, इसमें शामिल/winrt/wrl/client.h शामिल हैं। एम्बेडेड COM सूचक (ptr_ सदस्य) InternalRelease() फ़ंक्शन द्वारा जारी किया जाता है। पॉइंटर उपयुक्त उम्मीदवारों को जारी करने के लिए निम्न में से कोई भी तरीका बनाना:

  • विनाशक। कारण ComPtr <>
  • उपयोग करने के लिए ReleaseAndGetAddressOf का उपयोग कर
  • nullptr बताए(), रीसेट() कॉल के आसपास
  • लंबा रास्ता

तो nullptr बताए या रीसेट बुला() एक अच्छा विकल्प है, अपना चयन ले लो। या अगर आप इंटरफ़ेस पॉइंटर को स्वयं प्रबंधित करना चाहते हैं तो इसका बिल्कुल उपयोग न करें, यह निश्चित रूप से कॉमप्रेट का उपयोग करने की आवश्यकता नहीं है।

+0

विस्तृत स्पष्टीकरण के लिए धन्यवाद। मुझे वास्तव में एक स्मार्ट सूचक का उपयोग करने से लाभ मिलता है, लेकिन कुछ मामलों में मुझे रैपर वर्ग को बनाए रखने के दौरान आंतरिक संसाधन को अनलोड करना होगा। –

+0

रिलीज एंड गेट एड्रेसऑफ() -> रिलीज() संकलित भी नहीं करते हैं। (* instance.ReleaseAndGetAddressOf()) -> रिलीज() एक दुर्घटना है। इसे अपने उत्तर से हटा दें। –

3

आप एक शून्य सूचक असाइन कर सकते हैं।

+0

धन्यवाद, जितना आसान हो सके उतना आसान था! –

संबंधित मुद्दे