Сомневаюсь что на этапе компиляции можно отследить динамически регистрируемые и динамически создаваемые сущности, такие ошибки обычно очень нетривиальны.
А Form1:=TForm.create сделал, но Form1.free забыл - это и не ошибка имхо, так, опечатка
			
		Модератор: Модераторы
Сомневаюсь что на этапе компиляции можно отследить динамически регистрируемые и динамически создаваемые сущности
А Form1:=TForm.create сделал, но Form1.free забыл - это и не ошибка имхо, так, опечатка


вы прям умные показатели панацеей считаете. Строки в паскале давным давно умные, а утекшие динамически созданные строки у меня например - обычное дело


zub писал(а):Пожалуй я сольюсь из спора.появится нормальная возможность реализации хитрых указателей - посмотрим
type
  generic TAutoShared<T: class> = record
  private
  type
  {$push}{$interfaces com}
    IOwner = interface
      function  GetInstance: T;
    end;
  {$pop}
    TOwner = class(TInterfacedObject, IOwner)
    protected
      FInstance: T;
      function  GetInstance: T;
    public
      constructor Create;
      constructor Create(aInst: T);
      destructor Destroy; override;
    end;
  var
    FOwner: IOwner;
    function GetInstance: T; inline;
    procedure SetInstance(aValue: T); inline;
  public
    class operator :=(var s: TAutoShared): T; inline;
    class operator Explicit(var s: TAutoShared): T; inline;
    procedure Release; inline;
    property Instance: T read GetInstance write SetInstance;
  end;
implementation
{ TAutoShared.THolder }
function TAutoShared.TOwner.GetInstance: T;
begin
  Result := FInstance;
end;
constructor TAutoShared.TOwner.Create;
begin
  FInstance := T.Create;
end;
constructor TAutoShared.TOwner.Create(aInst: T);
begin
  FInstance := aInst;
end;
destructor TAutoShared.TOwner.Destroy;
begin
  FInstance.Free;
  inherited;
end;
{ TAutoShared }
function TAutoShared.GetInstance: T;
begin
  if FOwner = nil then
    FOwner := TOwner.Create;
  Result := FOwner.GetInstance;
end;
procedure TAutoShared.SetInstance(aValue: T);
begin
  if aValue <> Default(T) then
    begin
      if (FOwner <> nil) and (aValue = FOwner.GetInstance) then exit;
      FOwner := TOwner.Create(aValue)
    end
  else
    FOwner := nil;
end;
class operator TAutoShared.:=(var s: TAutoShared): T;
begin
  Result := s.Instance;
end;
class operator TAutoShared.Explicit(var s: TAutoShared): T;
begin
  Result := s.Instance;
end;
procedure TAutoShared.Release;
begin
  FOwner := nil;
end; 
Mikhail писал(а):Проблема даже не в том что нужно переделать компилятор, а в том что нужно еще все библиотеки и существующий на Паскале софт переделать.
zub писал(а):Интерфейсы
sts писал(а):Без этого нет смысла в развитии языка, вон добавили дженерики и что? где TComboBox<TMyObject>.Items<T> (или как там)?.
имею ввиду служебную инфу по отрицательному смещению и возможность использовать как указатель непосредственно на данные

Сейчас этот форум просматривают: Google [Bot] и гости: 1