powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / COM & garbage collector
3 сообщений из 3, страница 1 из 1
COM & garbage collector
    #32363330
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спецификация COM требует, чтобы указатель, ненужный для использования, освобождал объект, вызывая метод Release(); Почему тогда такой код вызывает ошибку:
имеем класс, где определены конструктор и деструктор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#import  "msxml3.dll"  
IXMLDOMDocumentPtr pXMLDoc;
ParseXML::ParseXML(void)
{

	pXMLDoc.CreateInstance( "msxml2.domdocument" );
}

ParseXML::~ParseXML(void)
{
	pXMLDoc.Release();
}

и имеем функцию, в которой этот класс создается и уничтожается:
Код: plaintext
1.
2.
3.
ParseXML parser = new ParseXML();
 /*some code*/ 
delete parser;


Всё отрабатывает нормально и указатель действительно освобождает объект.. но, при закрытии приложения, происходит повторный вызов Release() для указателя, хотя такой код нигде не присутствует. Есть предположение, что происходит автоматическая сборка мусора. Действительно ли это так и означает ли это, что можно позабыть обо всех указателях/объектах и довериться на этот сборщик?
...
Рейтинг: 0 / 0
COM & garbage collector
    #32363371
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IXMLDOMDocumentPtr - это smart pointer, который в деструкторе сам вызывает Release. Поэтому можешь его явно не вызывать, или перепиши так :

Код: plaintext
1.
2.
3.
ParseXML::~ParseXML(void)
{
	pXMLDoc = NULL;
}
...
Рейтинг: 0 / 0
COM & garbage collector
    #32363381
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аааа, теперь понятно почему Release() два раза вызывается. Спасибо. Теперь всё стало на свои места.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / COM & garbage collector
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]