Что есть Instance в контексте обработчика вызова конструктора?
Всем привет.
В объект скрипта добавляю свой класс:
со следующим обработчиком вызовов методом:
Если не использовать Instance, а создавать объект так:
Поясните, пожалуйста, какую роль играет Instance в контексте вызова конструктора.
Спасибо.
В объект скрипта добавляю свой класс:
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 в контексте вызова конструктора.
Спасибо.
Комментарии
Смотрим реализацию метода GetValue для класса TfsClassVariable
Если метод зарегистрирован как конструктор, то память под объект класса выделяется в коде FS:
Интересно, почему эта "особенность" не описана в документации к FS?