Есть некий объект некоего класса, перед использованием объекта необходимо вызвать конструктор, т.е. создать объект. Как проверить создан уже объект или нет?
Здравствуйте, eiNtiel, Вы писали:
N>Привет
N>Есть некий объект некоего класса, перед использованием объекта необходимо вызвать конструктор, т.е. создать объект. Как проверить создан уже объект или нет? N>
Здравствуйте, IRaven, Вы писали:
IR>Здравствуйте, eiNtiel, Вы писали:
V>>>А так: obj.HandleAllocated? N>>Так тоже, класс обычный class( TObject ), там нет этого метода
IR>
IR>if Assigned(Obj) then
IR>
IR>Ну и так далее
А вроде как Assigned(p) это то же самое что p<>nil (указатель) и @p<>nil (процедурная переменная), так что скорее всего не прокатит, к тому же:
Note: Assigned can't detect a dangling pointer--that is, one that isn't nil but no longer points to valid data. For example, in the code example for Assigned, Assigned won't detect the fact that P isn't valid.
Здравствуйте, eiNtiel, Вы писали:
N>Привет
N>Есть некий объект некоего класса, перед использованием объекта необходимо вызвать конструктор, т.е. создать объект. Как проверить создан уже объект или нет? N>
N>if ( obj = nil )...
N>
не выходит
Используй функццию
SysUtils.FreeAndNil
она вызывает деструктор и устанавливает указательв nil
после чего будет работать и N>if ( obj = nil )...
и
Assigned
IR>>Ну и так далее
V>А вроде как Assigned(p) это то же самое что p<>nil (указатель) и @p<>nil (процедурная переменная), так что скорее всего не прокатит, к тому же:
V>
V>Note: Assigned can't detect a dangling pointer--that is, one that isn't nil but no longer points to valid data. For example, in the code example for Assigned, Assigned won't detect the fact that P isn't valid.
Тогда никак. Нужно самому отслеживать работу с объектами. Эта тема тут уже не раз поднималась. Однозначного решения предложено не было. К сожалению
Здравствуйте, crazibill, Вы писали:
C>Используй функццию C>SysUtils.FreeAndNil C>она вызывает деструктор и устанавливает указательв nil C>после чего будет работать и N>>if ( obj = nil )... C>и C>Assigned
Да, все верно, и опять же придется в начеле функции obj := nil делать, думал может есть более правильное решение. Хотя это видимо и правильно, ведь локальные переменные обязаны быть вручную инициализированы
Здравствуйте, eiNtiel, Вы писали:
N>Есть некий объект некоего класса, перед использованием объекта необходимо вызвать конструктор, т.е. создать объект. Как проверить создан уже объект или нет? N>
N>if ( obj = nil )...
N>
не выходит
Способов масса, но все связаны с проектированием:
1. создать оповещение обьектов о своей смерти (чтобы другие обьекты почистили ссылки на него).
2. хранить ссылку на обьект в известном месте и всем остальным обьектам смотреть в это место, зачищать его после уничтожения (не очень хорошо)
3. Сделать обьект частью другого долгоживущего обекта и повесить на тот обект ответственность за его создание/уничтожение
итд