Как определить, создан объект Delphi StringList или нет

Я объявил переменную TStringList в приватном разделе. В событии нажатия кнопки я хочу получить доступ к этому объекту TStringList.

sVariable:= TStringList.Create;
sVariable.add('Test1');

Теперь всякий раз, когда я нажимаю на эту кнопку каждый раз, когда она создается, и для этой переменной выделяется память. Есть ли какое-либо свойство / функция, с помощью которой мы можем определить, создан ли объект для этой переменной или нет, и это также не приведет к ошибке нарушения доступа?


person Nalu    schedule 03.10.2011    source источник
comment
Осторожно, все ответы забывают инициализировать переменную / поле и вместо этого полагаются на неявную инициализацию.   -  person Premature Optimization    schedule 03.10.2011
comment
+1 для доступа вуаля действительно :-)   -  person Premature Optimization    schedule 03.10.2011
comment
Экземпляры класса @Downvoter Delphi действительно инициализированы нулем. На это действительно можно положиться. Вы должны полагаться на него всякий раз, когда пишете код в деструкторе.   -  person David Heffernan    schedule 03.10.2011


Ответы (1)


Другой способ приблизиться к этому, расширяющий ответ Дэвида, - использовать свойство с методом чтения.

TMyForm = class (TForm)
private
  FStrList : TStringList;
public
  property StrList : TStringList read GetStrList;
  destructor Destroy; override;
end;

implementation

function TMyForm.GetStrList : TStringList;
begin
  if not Assigned(FStrList) then
    FStrList := TStringList.Create;
  Result := FStrList;
end;

destructor TMyForm.Destroy;
begin
  FStrList.Free;
  inherited;
end;

Изменить: добавлен бесплатный вызов в переопределенный деструктор.

person Jerry Gagnon    schedule 03.10.2011
comment
Это лучший подход, если список может использоваться из более чем одной части кода, но, вероятно, излишний, если к нему нужно получить доступ только в одном месте. - person Gerry Coll; 04.10.2011