Что есть Instance в контексте обработчика вызова конструктора?

отредактировано May 2010 Раздел: FastScript
Всем привет.

В объект скрипта добавляю свой класс:
  with Script.AddClass(TVariantDictionary, 'TPersistent') do begin
...
    AddConstructor('constructor Create()', CallVarDictAccess);

со следующим обработчиком вызовов методом:
function TCustomAdvReport.CallVarDictAccess(Instance: TObject;
  ClassType: TClass; const MethodName: String; var Params: Variant): Variant;
begin
  Result := null;
  if ClassType <> TVariantDictionary then Exit;
...
  if MethodName = 'CREATE' then
    Result := Integer(TVariantDictionary(Instance).Create())
  else if MethodName = 'FREE' then
     Instance.Free();
Собственно говоря, смущает вот эта строчка:
    Result := Integer(TVariantDictionary(Instance).Create())
- в частности, роль Instance в данном контексте.

Если не использовать Instance, а создавать объект так:
    Result := Integer(TVariantDictionary.Create())
- то все вроде бы тоже работает, однако по завершению приложения фиксируется утечка памяти (не освобождается память объекта TVariantDictionary), хотя метод Free() вызывался.

Поясните, пожалуйста, какую роль играет Instance в контексте вызова конструктора.

Спасибо.

Комментарии

  • отредактировано 16:25
    Понятно.
    Смотрим реализацию метода GetValue для класса TfsClassVariable
    function TfsClassVariable.GetValue: Variant;
    begin
      if Params[0].Value = Null then
        Result := Integer(FClassRef.NewInstance) else        { constructor call }
        Result := Params[0].Value;                           { typecast }
      Params[0].Value := Null;
    

    Если метод зарегистрирован как конструктор, то память под объект класса выделяется в коде FS:
        Result := Integer(FClassRef.NewInstance) else        { constructor call }
    

    Интересно, почему эта "особенность" не описана в документации к FS?

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.