|
То ли лыжи не едут, то ли я ...
|
|||
---|---|---|---|
#18+
Всем привет! В проекте определил класс MyClass на основе Custom. В обработке события Destroy задал такой код: messagebox("Destroy !!!"). Создаю экземпляр: nn=newobject("MyClass"). Работаю с объектом. Пытаюсь объект удалить (варианты: nn=0, release nn) в памяти объект удаляется, но не срабатывает обработчик Destroy! Пытаюсь в проекте открыть класс - "Cannot modify a class that is in use". И только после команды CLEAR ALL срабатывает Destroy и описание класса в проекте разблокируется! В чем причина? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 14:50 |
|
То ли лыжи не едут, то ли я ...
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Разрушение объекта происходит тогда, когда будет обнулена последняя ссылка на этот объект. Как видите, в первых двух случаях Destroy сработал сразу после удаления или зануления переменной, содержащей единственную ссылку на объект, а в последнем случае удаление переменной nn ничего не дало. Поскольку осталась еще одна ссылка в переменной mm Каим образом Вы используете переменную nn? Никуда не записываете ее, например Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 15:41 |
|
То ли лыжи не едут, то ли я ...
|
|||
---|---|---|---|
#18+
ВладимирМ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Разрушение объекта происходит тогда, когда будет обнулена последняя ссылка на этот объект. Как видите, в первых двух случаях Destroy сработал сразу после удаления или зануления переменной, содержащей единственную ссылку на объект, а в последнем случае удаление переменной nn ничего не дало. Поскольку осталась еще одна ссылка в переменной mm Каим образом Вы используете переменную nn? Никуда не записываете ее, например Код: plaintext
В явном виде такой ситуации не наблюдается. Однако ваш комментарий посеял в моей душе сомнения. Суть вопроса: Есть базовый класс BClass(Custom), Есть два класса оба наследующие от BClass: ChClass1 и ChClass2 В классе ChClass1 есть свойство MyProp(Hidden) В конструкторе класса ChClass1 (метод Init) создаю экземпляр класса ChClass2 и помещаю ссылку на него в MyProp В деструкторе класса ChClass1 (метод Destroy) зануляю MyProp Создаю объект класса ChClass1 Удаляю объект - Destroy не срабатывает! Формально, в объекте я храню ссылку на экземпляр другого класса, так что ссылочной блокировки быть не должно! Если только не предположить, что ссылочная блокировка произошла на уровне базового класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 16:21 |
|
То ли лыжи не едут, то ли я ...
|
|||
---|---|---|---|
#18+
Если я правильно понял Ваш сценарий, то у меня все работает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
А вот если перед зануленим ссылки сделать присвоение mm = nn то зануление ссылки не вызовет срабатывание Destroy, поскольку еще осталась ссылка на объект. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 16:31 |
|
То ли лыжи не едут, то ли я ...
|
|||
---|---|---|---|
#18+
Я понял вашу мысль. В явном виде, как я уже говорил, такая ситуация не наблюдается! Но,видимо, вы правы! На самом деле, иерархия классов у меня гораздо более сложная, чем я описывал. Скорее всего где-то в глубинах иерархии и происходит нечто подобное. Пожалуй, я пересмотрю свою модель в сторону упрощения. А там посмотрим! Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 16:55 |
|
То ли лыжи не едут, то ли я ...
|
|||
---|---|---|---|
#18+
SoftParanoikЯ понял вашу мысль. В явном виде, как я уже говорил, такая ситуация не наблюдается! Но,видимо, вы правы! На самом деле, иерархия классов у меня гораздо более сложная, чем я описывал. Скорее всего где-то в глубинах иерархии и происходит нечто подобное. Пожалуй, я пересмотрю свою модель в сторону упрощения. А там посмотрим! Спасибо! Посмтрите, может у вас удаление объекта происходит в окружении WITH Объекта Удаление Объекта (или контейнера, где он находится) ENDWITH Конструкция WITH Объекта.... ENDWITH не явно создает переменную - ссылку на Объекта Внутри нее не надо удалять объекта, т.к. ссылка жива до конца ENDWITH С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2010, 07:54 |
|
То ли лыжи не едут, то ли я ...
|
|||
---|---|---|---|
#18+
Aleksey-KSoftParanoikЯ понял вашу мысль. В явном виде, как я уже говорил, такая ситуация не наблюдается! Но,видимо, вы правы! На самом деле, иерархия классов у меня гораздо более сложная, чем я описывал. Скорее всего где-то в глубинах иерархии и происходит нечто подобное. Пожалуй, я пересмотрю свою модель в сторону упрощения. А там посмотрим! Спасибо! Посмтрите, может у вас удаление объекта происходит в окружении WITH Объекта Удаление Объекта (или контейнера, где он находится) ENDWITH Конструкция WITH Объекта.... ENDWITH не явно создает переменную - ссылку на Объекта Внутри нее не надо удалять объекта, т.к. ссылка жива до конца ENDWITH С уважением, Алексей Да, это интересная мысль! Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2010, 09:03 |
|
|
start [/forum/topic.php?fid=41&msg=36436651&tid=1585643]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 150ms |
0 / 0 |