Здравствуйте, 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
Здравствуйте, crazibill, Вы писали:
C>Используй функццию C>SysUtils.FreeAndNil C>она вызывает деструктор и устанавливает указательв nil C>после чего будет работать и N>>if ( obj = nil )... C>и C>Assigned
Да, все верно, и опять же придется в начеле функции obj := nil делать, думал может есть более правильное решение. Хотя это видимо и правильно, ведь локальные переменные обязаны быть вручную инициализированы
Есть некий объект некоего класса, перед использованием объекта необходимо вызвать конструктор, т.е. создать объект. Как проверить создан уже объект или нет?
Здравствуйте, eiNtiel, Вы писали:
N>Привет
N>Есть некий объект некоего класса, перед использованием объекта необходимо вызвать конструктор, т.е. создать объект. Как проверить создан уже объект или нет? N>
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.
Тогда никак. Нужно самому отслеживать работу с объектами. Эта тема тут уже не раз поднималась. Однозначного решения предложено не было. К сожалению
Здравствуйте, eiNtiel, Вы писали:
N>Есть некий объект некоего класса, перед использованием объекта необходимо вызвать конструктор, т.е. создать объект. Как проверить создан уже объект или нет? N>
N>if ( obj = nil )...
N>
не выходит
Способов масса, но все связаны с проектированием:
1. создать оповещение обьектов о своей смерти (чтобы другие обьекты почистили ссылки на него).
2. хранить ссылку на обьект в известном месте и всем остальным обьектам смотреть в это место, зачищать его после уничтожения (не очень хорошо)
3. Сделать обьект частью другого долгоживущего обекта и повесить на тот обект ответственность за его создание/уничтожение
итд