![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FDirect3D._Release - какой правильный спосоп освобождения обьекта
MrAngel © (2004-04-30 23:14:00)FDirect3D : IDIRECT3D9;
Вот это работает.
if Assigned (FDirect3D) then
begin
//FDirect3D._Release;
FDirect3D := nil;
end;
Вот это работает но при выходе вылетает ошибка.
if Assigned (FDirect3D) then
begin
FDirect3D._Release;
FDirect3D := nil;
end;
Почему так??? Ведь FDirect3D := nil; не что иное как присваивание нулевого значения переменной, следовательно указатель в памяти безвозвратно теряется, а обьект не освобождается.
MrAngel (2004-05-05 01:54:00) [1]Ясно thanks
VMcL (2004-05-02 18:29:00) [2]>>MrAngel (02.05.04 16:15) [3]
Это особенность конкретной среды программрования, а не COM. Компилятор Delphi автоматически вставляет вызов _Release(), а компилятор MSVC - нет, надо руками.
MrAngel (2004-05-02 16:15:00) [3]M&Ms ok ясно, значит это одна из особенностей COM.
M&Ms (2004-05-02 01:08:00) [4]2cyborg
неправда! второе вообще не для делфи
Почему так??? Ведь FDirect3D := nil; не что иное как присваивание нулевого значения переменной, следовательно указатель в памяти безвозвратно теряется, а обьект не освобождается.
читай хелп по COM-обьектам... вообще в Делфи с их освобожедением можно вообще не париться -- _Release вызывается автоматически (а когда НИЛ присваиваешь -- принудительно)
cyborg (2004-05-01 10:36:00) [5]Второе для Дельфи5 и ниже, первое для Дельфи 6 и выше.