Vapaamies писал(а):Смиялсо. Скажу вам по секрету: именно так работает TObject.Free.
То есть? В коде FPC там везде фигурирует Self, насколько я вижу.
Модератор: Модераторы
Vapaamies писал(а):Смиялсо. Скажу вам по секрету: именно так работает TObject.Free.
Vapaamies писал(а):Сермяжный смысл в том, что методы, не обращающиеся к полям объекта, вполне штатно можно вызывать и для неинициализированного экземпляра.
Максим писал(а):Просто ваш комментарий подразумевал, что Free работает принципиально с неинициализированным объектом, хотя из кода этого не следует, а, как раз, напротив, он в этом случае ничего не делает.
Максим писал(а):Резковато выразились?
NTFS писал(а):Потому что нет никакого смысла в вызове метода у несозданного объекта.
Максим писал(а):Вы можете привести внятный пример, где это требуется
Vapaamies писал(а):Как бы то ни было, TSharedObject(nil).Ref и TSharedObject(nil).Release вызываются и не падают.
program Project1;
Type
{ TFoo }
TFoo = Class
Private
Public
A: Integer; Static;
Class Procedure Bar;
End;
{ TFoo }
Class Procedure TFoo.Bar;
Begin
WriteLn('Hello World ', A, ' times');
End;
begin
TFoo.A := 10;
TFoo.Bar;
end.
Vapaamies писал(а):Но вызывается-то он в том числе и для nil
Vapaamies писал(а):Забыл уточнить, что методы класса тут не подходят, потому как добавляются и освобождаются ссылки на конкретные объекты.
Vapaamies писал(а):Сермяжный смысл в том, что методы, не обращающиеся к полям объекта, вполне штатно можно вызывать и для неинициализированного экземпляра.
Kemet писал(а):Vapaamies, а что у Вас там за проект Ono?
TObject.Free по своей логике предназначен для вызова в том числе и для nil-объектов, для чего он вначале проверяет, не равен ли Self nil,
Рождённый_в_СССР писал(а):если уж Паскаль не видет смысла в вызове метода у не созданного объекта, почему он это компилирует?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1