Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интерфейсы. А надо ли их освобождать?


Страницы:   1 2 3

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]


Зависит от самого интерфейса и контекста его использования.
Но предпочитаю явное освобождение - это наглядней, проще для понимания общей логики и немало способствует упрощению отладки приложения.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо