Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
Подозреваю, что вопрос банальный, но тем не менее. При вызове метода free объекта происходит освобождение памяти, однако указатель на него не зануляется. Должен быть какой-то элементарный способ проверить, что метод free уже вызван. Как это красиво реализуется, подскажите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:10 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:13 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
Делаю всегда вручную, после Free (когда очень надо). Других вариантов не вижу в принципе (Self := Nil выполнять нельзя, даже в Destroy), кто подскажет - буду рад. Неплохо у меня работало зануление указателя формы (работает только в самом простом варианте, когда используется переменная формы из ее юнита и такая форма живет в приложении в единственном виде!!! - и это очень частный случай) в ее OnDestroy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:18 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Получается, что тоже в ручную, нужно вызывать парой не var.Free и var := Nil, а то что написал pkarklin. И такое работать, конечно не будет Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 15:59 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
2 pkarklin А вдруг объект еще жив и выполняет какую-то работу? а мы берем указатель на него - хлоп и в nil, это не выход. Т.е. я так понимаю проверить, что объект уже отжил свое, не занулив указатель, невозможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:01 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
А вдруг объект еще жив и выполняет какую-то работу? а мы берем указатель на него - хлоп и в nil, это не выход. А это как это? Если тока ты мултитрид приложения будешь писать. А потом, указатель в nil, сие не есть уничтожение объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:09 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
Вы не подскажете, где правильнее вставить процедуру FreeAndNil(form2) при закрытии формы form2? В обработчике onclose или другом? и нужно ли вообще это делать? у меня проблемка такая, что после createform, show размер занимаемой приложением памяти увеличивается приблиз. на 600-800 кб, и после close этой формы прибавляется еще около 100 кб. Я free или FreeAndNil ставлю в обработчике onclose этой формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:16 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
2 pkarklin совсем не обязательно писать многопоточное приложение, чтобы в момент проверки объекта было не известно вызван его метод free или нет. А потом Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:21 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
2 kitty На OnClose 2 Guilty FreeAndNil как раз удаляет из памяти из обнуляет указатель. После вызова этой процедуры в указателе будет nil. Чего непонятно тут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:26 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
2 Guilty Совсем обязательно сбрасывать указатель в nil после уничтожения объекта и тогда у вас не будет проблем с проверкой на существование объекта. 2 kitty А в обработчике он Close не пробовали писать Action := caFree. Тогда форма сама уничтожиться при закрытии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:28 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
Итак, способа проверить, что метод free уже вызван, "пока" нет, в принципе объект и не обязан (может) отслеживать за всеми нашими переменными. Что касается Form2, то тут нужно решить, нужна ли форма после ее закрытия, если нет - то в OnClose пишем Action := caFree (caHide - по умолчанию, если OnClose вообще нет, а если есть придется явно указать что-либо), если некоторое время еще нужна (для вытаскивания значений из диалога, например, то Action := caHide, а для уничтожения вызывать явно Form2.Release. Занулять переменную Form2 вовсе не обязательно, а вставлять Free или что-то другое в обр. событий формы мягко выражаясь неверно. В очень редких случаях (когда это нужно для логики программы) для определения живет-ли форма или нет (только если она задумана единственной в приложении) полезно в OnDestroy делать Form2 := Nil. Именно это я имел ввиду, и уже немного жалею, что высказался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:30 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
FreeAndNil ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:31 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
SysUtils. JibSkeart??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 16:36 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
тфуу про это уже говорилось просто начало топика не посмотрел ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 17:04 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
А почему бы этому объекту (или тому, кто вызывает его Free ) не сбрасывать какой-нибудь глобальный флажок, или счётчик - на Create : Inc( Count ) , на Free : Dec( Count ) , а в программе проверять, когда этот счётчик равен 0 - все объекты этого типа в программе отработали и удалены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 17:33 |
|
||
|
объект удаляется, но указатель на него не зануляется - это факт, но..
|
|||
|---|---|---|---|
|
#18+
2 Горшков Михаил Алексеевич Можно конечно и так, можно и чего-нибудь другое придумать, но изначально речь шла о том, как красиво (без) излишних наворотов проверить, был ли уже free объекта? Пока рулит идея вызывать FreeAndNil вместо Free объекта, ну и еще, если объект форма, то спечифически обрабатывать ее события закрытия или уничтожения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32243547&tid=2117216]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 459ms |

| 0 / 0 |
