मैं कुछ विरासत सी के माध्यम से जा रहा हूँ ++ विंडोज इमेजिंग घटक पुस्तकालय के साथ काम कर कोड के साथ एक समारोह के लिए एक CComPtr पासिंग और मैं इस मनाया:एक कच्चे सूचक प्रोटोटाइप
void setProperties(IPropertyBag2* const pBag)
{
pBag->Write(...);
}
void other_function()
{
CComPtr<IPropertyBag2> pBag;
//Code to initialize pBag
setProperties(pBag);
}
setProperties
विधि बस का एक समूह लिखते हैं संपत्ति बैग के लिए गुण। कोड संकलित करता है और ठीक चलाता है क्योंकि मुझे लगता है कि यह उपयुक्त टाइपकास्टिंग ऑपरेटर को कॉल करता है।
मेरा सवाल यह है कि क्या इस तरह के एक इंटरफेस की सिफारिश की जाती है या सूचक को पास करने का एक बेहतर तरीका है। उदाहरण के लिए, वहाँ कोई अंतर (सुरक्षा/प्रदर्शन के संदर्भ में) है अगर हस्ताक्षर में बदल गया था:
void setProperties(const CComPtr<IPropertyBag2>& pBag)
एक CComPtr पैरामीटर का उपयोग करने से आप हमेशा CComPtr का उपयोग करने के लिए बाध्य नहीं होंगे, क्योंकि CComPtr रचनाकार स्पष्ट नहीं हैं। और कच्चे इंटरफ़ेस पॉइंटर्स स्मार्ट पॉइंटर्स नहीं हैं। किसी ऑब्जेक्ट को रिलीज़ करने के लिए भूलना इसे रिसाव कर देगा। इसमें 'नई' के साथ आवंटित स्मृति को हटाने के लिए भूलने जैसी सभी समस्याएं हैं। – user1610015