Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Проверить объект на существование   Найти похожие ветки 

 
Viktor   (2004-04-17 16:52) [0]

Добрый день
Не подскажете ли как сделать сабж

var
 MyArray: array [1..5] of TSomeClass;
...

if (MyArray[i] не создан) then
 MyArray[i] := TSomeClass.Create;

MyArray[i].SomeProperty := Value;
MyArray[i].DoSomething;


или как это сделать по-другому.

Спасибо.


 
TUser ©   (2004-04-17 16:55) [1]

if not assigned(MyArray[i]{ не создан}) then
MyArray[i] := TSomeClass.Create;


 
Anatoly Podgoretsky ©   (2004-04-17 17:00) [2]

Что бы работало через assigned нужно при освобожденнии объекта присваивать MyArray[i] nil


 
Gero ©   (2004-04-17 17:04) [3]

> Anatoly Podgoretsky ©   (17.04.04 17:00)

FreeAndNil, короче


 
Viktor   (2004-04-17 17:13) [4]

Написал небольшой тест. Разницы то нет в массиве объект или нет.

procedure TForm1.btnTestClick(Sender: TObject);
var
 aButton: TButton;
begin
 //aButton := TButton.Create(nil);

 if not assigned(aButton) then
   ShowMessage("Объект не создан!")
 else
   ShowMessage("OK");

 aButton.Free;
end;


Здесь какой-то баг. Жмём на btnTest - появляется сообщение OK (!)
а затем кнопка Тест пропадает. Если раскомментировать создание объекта, тоже появится OK.

Что-то здесь не так!


 
Viktor   (2004-04-17 17:18) [5]

FreeAndNIL работает, если только aButton создан. В противно случае вылетает Access Violation :(


 
TUser ©   (2004-04-17 17:20) [6]

Читай [2]


 
Viktor   (2004-04-17 17:27) [7]

Всё работает. Спасибо за подмогу :)


 
KSergey ©   (2004-04-18 12:03) [8]

> Viktor   (17.04.04 17:13) [4]
> Что-то здесь не так!

Assign - лишь проверка на nil (фактически - 0)
А локальные переменные изначально нулем не инициализируются!!


 
Anatoly Podgoretsky ©   (2004-04-18 12:07) [9]

Viktor   (17.04.04 17:13) [4]
Тебе очень повезло, так и систему загробить недолго, хоть она и защищенная.



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
4-1078404755
mip
2004-03-04 15:52
2004.05.02
Подскажите плз. как закрыть работающий Exe, лучше на примере?


4-1074747407
GrayFace
2004-01-22 07:56
2004.05.02
Есть ProcessId Как получить hProcess, его ветки, юзера, %CPU?


1-1081927015
Viktor
2004-04-14 11:16
2004.05.02
exit;


1-1081941918
Cr@zy-EyE
2004-04-14 15:25
2004.05.02
Создаю объект в initialization, а в юните его не видно


14-1081342930
able
2004-04-07 17:02
2004.05.02
Забыл пароль в программе :(