![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интерфейсы. А надо ли их освобождать?
DevilDevil © (2006-12-04 11:24:00)А надо ли освобождать интерфейсы, если они сами автоматически освобождаются, при завершении приложения?
Anatoly Podgoretsky (2006-12-04 14:54:00) [21]> oxffff (04.12.2006 13:50:23) [23]
> Опять все правы.
Консенсунс есть продукт непротивления сторон.
Сергей М. (2006-12-04 14:03:00) [22]
> настаиваю на "использовать _Release в Delphi крайне не рекомендуется".
> Можно даже сказать "запрещено"
Да глупости же !
DevilDevil (2006-12-04 13:56:00) [23]
> Anatoly Podgoretsky © (04.12.06 13:44) [22]
Анатолий, при всём уважении, настаиваю на "использовать_Releaseв Delphi крайне не рекомендуется". Можно даже сказать "запрещено"
oxffff (2006-12-04 13:50:00) [24]Опять все правы. И это хорошо.
Anatoly Podgoretsky (2006-12-04 13:44:00) [25]> DevilDevil (04.12.2006 13:12:20) [20]
Мало ли, что считается?
Во первых это не явное, а явное _Release и его тоже используют, но часто без необходимости, просто слышали, что это круто.
Anatoly Podgoretsky (2006-12-04 13:43:00) [26]> oxffff (04.12.2006 13:07:19) [19]
Я ее озвучил выше
DevilDevil (2006-12-04 13:12:00) [27]
> Anatoly Podgoretsky © (04.12.06 12:23) [13]
Анатолий, при всём уважении... Явным особождением в Delphi считается присвоение nil, которое в свою очередь ни к каким ошибкам не приводит
oxffff (2006-12-04 13:07:00) [28]
> Anatoly Podgoretsky © (04.12.06 13:02) [18]
> > oxffff (04.12.2006 12:47:17) [17]
>
> Вот видишь, сколько ты условий насчитал, а ведь даже малой
> части не перечислил.
Так вы поясните свою точку зрения.
Anatoly Podgoretsky (2006-12-04 13:02:00) [29]> oxffff (04.12.2006 12:47:17) [17]
Вот видишь, сколько ты условий насчитал, а ведь даже малой части не перечислил.
oxffff (2006-12-04 12:47:00) [30]
> Anatoly Podgoretsky © (04.12.06 12:23) [13]
> > Сергей М. (04.12.2006 12:06:07) [7]
>
> Если ты про интерфейсы, используемые в Дельфи, то явное
> особождение приводит к многочисленным ошибкам.
многочисленным ошибкам?
Приведите пример пожалуйста.
Ошибки возможны, если вместо
1. a:=nil
2 intFclear(a);
3 a._Release;pointer(a):=nil;
Использовать a._Release,
А явное освобождение надежнее. поскольку можно обернуть в
try
finally
end;
Да и лучше избегать временных(не объявленных) интерфейсных переменных,
поскольку их в try
finally
end;
Нормальными средствами не обернешь.
Anatoly Podgoretsky (2006-12-04 12:33:00) [31]> DrPass (04.12.2006 12:11:10) [10]
И чистить переменную три раза, что совсем очистить.
Anatoly Podgoretsky (2006-12-04 12:32:00) [32]> umbra (04.12.2006 12:10:09) [9]
Это по каким причинам Дельфи не уменьшит счетчик ссылок при выходе из области видимости. При условии, что шаловливые ручки не применялись?
Сергей М. (2006-12-04 12:31:00) [33]
> Anatoly Podgoretsky © (04.12.06 12:23) [13]
Да, приводит. Если нет четкого понимания, где, что, почему, как и при каких условиях происходит в ходе явного освобождения)
У меня не то что "многочисленных" - вообще никаких ошибок не происходит при этом.
Что я не так делаю ?)
Только не надо уже про "делать присваивание два раза подряд - чтобы уж наверняка", мне прекрасно известны действия компилятора при том или ином "варианте освобождения")
Anatoly Podgoretsky (2006-12-04 12:23:00) [34]> Сергей М. (04.12.2006 12:06:07) [7]
Если ты про интерфейсы, используемые в Дельфи, то явное особождение приводит к многочисленным ошибкам.
Сергей М. (2006-12-04 12:19:00) [35]
> DrPass © (04.12.06 12:11) [10]
Хорошо, поменяем в [1] общий случай и частный случай.
Принципиально это ничего не меняет - все равно нужно уточнять контекст, прежде чем принимать решение.
> Kolan © (04.12.06 12:10) [8]
Что "зачем надо" ? Упрощать отладку что ли ?)
Kolan (2006-12-04 12:12:00) [36]Автору:
when an object is referenced only through interfaces, there is no need to destroy it manually; the object is automatically destroyed when the last reference to it goes out of scope.
DrPass (2006-12-04 12:11:00) [37]
> В общем случае - да, надо.
В общем случае как раз не надо. Delphi всегда генерирует для интерфейсов вызов _Release при выходе соотв. переменной за пределы области видимости. Надо в том случае, если СОМ-объект требует дополнительных операции для деинициализации. Ну или если логика работы приложения требует. А явное освобождение "просто так" делать не стоит. Это все равно что делать присваивание два раза подряд - чтобы уж наверняка :)
umbra (2006-12-04 12:10:00) [38]по определению они освобождаются, когда их счетчик ссылок становится равным нулю. Чтобы он стал равным нулю, каждый клиент должен вызвать метод _Release интерфейса IUnknown. Если по каким-то причинам этот метод не вызван, счетчик не обнулится и интерфейс не освободится. Явным образом вызвать этот метод можно присвоив переменной интефейсного типа nil.
Kolan (2006-12-04 12:10:00) [39]> Но предпочитаю явное освобождение - это наглядней, проще
> для понимания общей логики и немало способствует упрощению
> отладки приложения.
Зачем такое надо? Я напротив использую интерфейс когда объект передается в разные методы и непонятно где уничтожать его. Все само удалится...
Сергей М. (2006-12-04 12:06:00) [40]
> DevilDevil © (04.12.06 12:01) [5]
Зависит от самого интерфейса и контекста его использования.
Но предпочитаю явное освобождение - это наглядней, проще для понимания общей логики и немало способствует упрощению отладки приложения.