2010-08-24 14 views
7

मैं निम्नलिखित है कहो? या यह myBSTR की एक प्रति बना देता है और यदि मैं myBSTR मुक्त नहीं करता हूं तो मेमोरी लीक उत्पन्न करता है?समझौता CComBSTR असाइनमेंट ऑपरेटरों

यदि यह स्मृति रिसाव पैदा करता है, तो इसे संभालने का सबसे प्रभावी तरीका क्या है? (myBSTR एक BSTR के रूप में एक समारोह में पारित हो जाएगा और मैं एक CComBSTR आंतरिक रूप के रूप में यह संग्रहीत करना चाहते हैं)

उत्तर

11

इस मामले में CComBSTR उदाहरण एक स्वतंत्र कॉपी बन जाती है। रिसाव से बचने के लिए आपको myBSTR मैन्युअल रूप से मुक्त करने की आवश्यकता होगी।

इस परिदृश्य को ठीक करने का सबसे सरल दृष्टिकोण बीच आदमी SysAllocString समारोह को छोड़

CComBSTR myCComBSTR = L"MYBSTR"; 

दूसरी ओर यदि आप एक BSTR है और इसके बारे में एक CComBSTR ले मालिक जहाज के लिए तो विधि देते हैं का उपयोग करना चाहते है । यह विधि स्रोत BSTR से स्रोत के स्वामित्व को CComBSTR उदाहरण में स्थानांतरित करती है।

CComBSTR myCComBSTR; 
myCComBSTR.Attach(myBSTR); 
+1

CComBSTR :: अटैच और CComBSTR :: AssignBSTR के बीच क्या अंतर है? –

+0

@ mvdavid7, AssignBSTR स्वामित्व स्थानांतरित नहीं करता है और सिर्फ एक प्रति बनाता है। 'CComBSTR' पर स्वामित्व स्थानांतरित करें और कोई प्रतिलिपि नहीं बनाते हैं। – JaredPar

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