Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
смертельная опасность выброса исключения из конструктораW-w-what?
Ее уже здесь обсуждали, выяснили, что неполезная
возможность создания объектов с неизвестным на этапе компиляции классома можно пример?
procedure CreateComponent;
var
ComponentClass: TComponentClass;
begin
try
ComponentClass := FindComponentClass(CompClass);
Result := nil;
if Assigned(FOnCreateComponent) then
FOnCreateComponent(Self, ComponentClass, Result);
if Result = nil then
begin
Result := TComponent(ComponentClass.NewInstance);
if ffInline in Flags then
begin
Include(Result.FComponentState, csLoading);
Include(Result.FComponentState, csInline);
end;
try
Result.Create(Owner);
except
Result := nil;
raise;
end;
end;
Include(Result.FComponentState, csLoading);
except
if not Recover(Result) then raise;
end;
end;
Соответственно, в деструкторе достаточно корректно обрабатывать нулевые значения, в чем сильно помогает процедура FreeAndNil, которая освобождает объект, только если ссылка на него уже не nil.
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;Андерс Хейлсберг получил награду популярного журнала Dr. Dobb's Journal за создание Turbo Pascal, Delphi и C#.
То есть все интерфейсы по-прежнему порождены от IUnknown?
ОК.
Но значит ли это, что любой интерфейс автоматически имеет реализацию, отслеживающую количество ссылок, и освобождающую объект, когда ссылок на него нет?
(Я помню, что такое было у COM-объектов, раньше, году так в 2000...
Но с тех пор я сам перешел на C#, где объявление интерфейса означает только, что у класса есть такие функции, но они могут быть и абстрактными, т.е. без реализации вообще, и уж точно никогда нельзя гарантировать, что вот этот интерфейс будет иметь вот такую реализацию.
Поэтому и спрашиваю у тех, кто может быть в курсе сегодняшнего состояния Паскаля в Дельфах.)
Об «очевидном» и полезном или создание и уничтожение объектов Delphi