Как идентифицировать Delphi StringList объект создан или нет - PullRequest
3 голосов
/ 03 октября 2011

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

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

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

Ответы [ 2 ]

9 голосов
/ 03 октября 2011
if not Assigned(sVariable) then
  sVariable:= TStringList.Create;
sVariable.add('Test1');
5 голосов
/ 03 октября 2011

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

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;

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

...