-
ggg (20.06.08 06:03) [20]>> [1]
system.pas
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
Вы считаете это глупость?
>> [3]
FreeInstance вызывается после Destroy, но если проверку добавить в оба метода, то да. Спасибо, помогло :)
>> [6]
Да, иметь возможность вызвать метод Free в любой момент не заботясь о последствиях весьма удобно.
Заменить это уменьшением UseCount.. не безопасно. Просто, возможно несколько условий на различных стадиях работы движка, когда объект необходимо удалить. Тогда при выполнении нескольких условий счетчик может стать равным 0 до того, как объект действительно освободится.
>>[14]
Где-то встречал, будто опыты показали, что if...else работает быстрее, чем Exit. Не ручаюсь за достоверность, но большой разницы нет.
>>[16]
Насколько мне известно, эти begin..end дадут несколько другой код после компиляции, который будет выполнятся дольше. Хотя, возможно, это предрассудки моего препода по паскалю :) -
Loginov Dmitry © (20.06.08 07:50) [21]> Насколько мне известно, эти begin..end дадут несколько другой
> код после компиляции, который будет выполнятся дольше
Разговор про наглядность, а не про скорость. Скорость тут дело десятое.
> Хотя, возможно, это предрассудки моего препода по паскалю
> :)
+1 :) -
Игорь Шевченко © (20.06.08 09:44) [22]
> ты во внутрь самого фри не попадешь при таком раскладе
я попаду в любой невиртуальный метод -
ggg (20.06.08 20:06) [23]Ну как бы всё-равно проблемы остались -- одну и ту же проверку приходится производить дважды: в Destroy и в FreeInstance. Если есть еще предложения, буду рад выслушать.
-
Eraser © (20.06.08 20:54) [24]> [20] ggg (20.06.08 06:03)
> Где-то встречал, будто опыты показали, что if...else работает
> быстрее, чем Exit. Не ручаюсь за достоверность, но большой
> разницы нет.
ох уж эта привычка применять тонкую оптимизацию где попало, а потом разгребаешь
if then
if then
if then
и еще тележку else if