Здравствуйте ml, Вы писали:
ml>привет, all!
ml>есть класс с такими членами:
ml>ml> MSXML2::IXSLProcessorPtr m_spIXSLProcessor;
ml> MSXML2::IXSLTemplatePtr m_spIXSLTemplate;
ml> MSXML2::IXMLDOMDocument2Ptr m_spStyleSheet;
ml>
ml>в одном из методов они работают:
ml>ml> if ( m_spIXSLTemplate == NULL ) {
ml> hr = m_spIXSLTemplate.CreateInstance(__uuidof(MSXML2::XSLTemplate30));
ml> if ( FAILED(hr) ) // это лишнее, так как данные смарт поинтеры кидают эксепшн без тебя
ml> throw _com_error(hr);
ml> m_spIXSLTemplate.AddRef(); //это тем более лишнее
ml> }
ml>
ml> if ( m_spStyleSheet == NULL) {
ml> hr = m_spStyleSheet.CreateInstance(__uuidof(MSXML2::FreeThreadedDOMDocument30));
ml> if ( FAILED(hr) ) //лишнее
ml> throw _com_error(hr);
ml> m_spStyleSheet.AddRef(); //лишнее
ml> }
ml> m_spStyleSheet->async = VARIANT_FALSE;
ml> bSuccess = m_spStyleSheet->load(translatorFile);
ml> m_spIXSLTemplate->PutRefstylesheet(m_spStyleSheet);
ml>
ml> m_spIXSLProcessor = m_spIXSLTemplate->createProcessor();
ml> m_spIXSLProcessor.AddRef();//лишнее
ml>
ml>а в десктрукторе класса валятся Access violation при удалении описанных выше членов
ml>без AddRef тож не работает
ml>памагите!!!!!
Ты пользуешься смарт поинтерами и явно вызывать AddRef тебе не надо, а если валится даже с AddRef значит проблемма не в этом. Может по подробнее опишешь на удалении какого класса валиться, а лучше тот код на котором валиться