Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / COM & garbage collector / 3 сообщений из 3, страница 1 из 1
25.12.2003, 14:45
    #32363330
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM & garbage collector
Спецификация 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
25.12.2003, 15:11
    #32363371
Tracer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
COM & garbage collector
IXMLDOMDocumentPtr - это smart pointer, который в деструкторе сам вызывает Release. Поэтому можешь его явно не вызывать, или перепиши так :

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


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