Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Автоматическое уничтожение TFrame / 14 сообщений из 14, страница 1 из 1
15.11.2017, 16:22:14
    #39553677
DesWind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
Есть класс TFrame реализующий интерфейс

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
type
IIntf=interface
  function Test: integer;
end
TAnyFrame=class(TFrame, IIntf)
  //.....
end;
procedure AnyProc;
var Intf: IIntf
begin
  Intf:=TAnyFrame.Create(nil);
end;


При выходе из процедуры AnyProc не происходит вызов деструктора TAnyFrame, как я ожидал.
Почему это происходит?
...
Рейтинг: 0 / 0
15.11.2017, 16:25:23
    #39553682
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWindПочему это происходит?Потому, что для TComponent отключен автоматический подсчет ссылок

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function TComponent._AddRef: Integer;
begin
  if FVCLComObject = nil then
    Result := -1   // -1 indicates no reference counting is taking place
  else
    Result := IVCLComObject(FVCLComObject)._AddRef;
end;

function TComponent._Release: Integer;
begin
  if FVCLComObject = nil then
    Result := -1   // -1 indicates no reference counting is taking place
  else
    Result := IVCLComObject(FVCLComObject)._Release;
end;
...
Рейтинг: 0 / 0
15.11.2017, 16:28:41
    #39553685
DesWind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
_Vasilisk_,

Это я видел. А по какой причине это сделано?
...
Рейтинг: 0 / 0
15.11.2017, 16:41:50
    #39553705
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWind_Vasilisk_,

Это я видел. А по какой причине это сделано?
Ты думаешь, здесь присутствуют разработчики этих чудес?
...
Рейтинг: 0 / 0
15.11.2017, 16:47:24
    #39553713
DesWind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
чччД,

Щас, покопался... конечно надо литературку почитать...
Но в общих чертах, TComponent надо уже регистрировать как COM-объект и тогда все будет.
...
Рейтинг: 0 / 0
15.11.2017, 17:13:40
    #39553741
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWindпо какой причине это сделано?Жизненный цикл TComponent определяется владельцами. И скрещивать две, принципиально разных, модели в Борланде не рискнули.

Представьте, Вы в программе работаете с объектом. Потом кастанули его к интерфейсу и объект потеряли. Подумайте над таким кодом
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
TMyObj = class(TInterfacedObject)
public
  procedure Test;
end;

procedure DoSomething(AIntf: IInterface);
begin
end;

LObj: TMyObj;
begin
  LObj := TMyObj.Create;
  try
    DoSomething(LObj);
    LObj.Test;
  finally
    LObj.Free;
  end;
end;
...
Рейтинг: 0 / 0
15.11.2017, 17:14:42
    #39553742
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWindтогда все будет.Расскажите, какую цель Вы преследуете?
...
Рейтинг: 0 / 0
15.11.2017, 18:06:19
    #39553788
DesWind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
_Vasilisk_,

В данном конкретном случае, это для единообразия и "более жесткой розетки", можно было бы обойтись и базовым классом, с абстрактными методами. Интерфейс ужесточает, требование перекрытия/реализации.
Но дальше потомки могут поддерживать различный функционал который определяется по наличию того или иного интерфейса.

Т.е. автоматическое уничтожение это не сама цель, просто обнаружил такое поведение.
...
Рейтинг: 0 / 0
15.11.2017, 18:19:10
    #39553806
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWindТ.е. автоматическое уничтожение это не сама цель, просто обнаружил такое поведение.Не смешивайте интерфейсные и классовые объект. Проблем потом будет куча. Работайте или с объектами (тогда вопроса об автоматическом удалении не возникает), или с интерфейсами (тогда при чем здесь TFrame?)
...
Рейтинг: 0 / 0
15.11.2017, 18:21:50
    #39553810
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWind...
В данном конкретном случае, это для единообразия и "более жесткой розетки", можно было бы обойтись и базовым классом, с абстрактными методами. Интерфейс ужесточает, требование перекрытия/реализации.
Но дальше потомки могут поддерживать различный функционал который определяется по наличию того или иного интерфейса.

Т.е. автоматическое уничтожение это не сама цель, просто обнаружил такое поведение.

Очередную сову на глобус, понятно.
...
Рейтинг: 0 / 0
15.11.2017, 18:38:36
    #39553822
DesWind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
_Vasilisk_,

Есть десяток приборов, с определенным общим набором команд(общий интерфейс), но с различными данными которые надо отображать поразному(TFrame).

Так же есть дополнительный набор функциональности, который может быть а может и не быть, что определяется наличием того или иного интерфейса.

Классовые переменные и переменные интерфейсные вобщем-то никак не смешиваются. Фрейм создается и уничтожается вручную.

У текущего фрейма запрашивается тот или иной интерфейс.
...
Рейтинг: 0 / 0
15.11.2017, 18:55:18
    #39553833
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWindФрейм создается и уничтожается вручную.
У текущего фрейма запрашивается тот или иной интерфейс.Тогда текущее поведение именно то, что Вам нужно. В чем проблема?
...
Рейтинг: 0 / 0
15.11.2017, 19:03:00
    #39553838
DesWind
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
_Vasilisk_,

Я ж говорил выше. Никаких претензий к поведению не имею. Любопытно было почему оно такое. Понял. Различные модели.
За экземляром TComponent должен присматривать владелец. Правильно?
...
Рейтинг: 0 / 0
15.11.2017, 19:09:53
    #39553840
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическое уничтожение TFrame
DesWindПравильно?Нет. Неожиданная гибель объектов при касте к интерфейсам
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Автоматическое уничтожение TFrame / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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