powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Автоматическое уничтожение TFrame
14 сообщений из 14, страница 1 из 1
Автоматическое уничтожение TFrame
    #39553677
DesWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть класс 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
Автоматическое уничтожение TFrame
    #39553682
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Автоматическое уничтожение TFrame
    #39553685
DesWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

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

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

Щас, покопался... конечно надо литературку почитать...
Но в общих чертах, TComponent надо уже регистрировать как COM-объект и тогда все будет.
...
Рейтинг: 0 / 0
Автоматическое уничтожение TFrame
    #39553741
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Автоматическое уничтожение TFrame
    #39553742
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DesWindтогда все будет.Расскажите, какую цель Вы преследуете?
...
Рейтинг: 0 / 0
Автоматическое уничтожение TFrame
    #39553788
DesWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

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

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

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

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

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

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

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

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

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


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