|
|
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
Господа. Вопрос такой. Есть родительский класс TParent* и несколько дочерних классов TChild1, TChild2 и т.д. Вопрос в том, как правильней удалять созданные экземпляры дочерних классов с помощью delete. Аналогичный вопрос про указатели типа void. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. P.S. Это всё к задаче об хранении набора обектов TChild1, TChild2 в списке TList, а именно корректному освобождению памяти при отчистке списка. P.P.S. Пишу в CBuilder. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 13:36:53 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
Aleks_U пишет: > //аналогично с нетипизированными (void) указателями > //так сойдет??? > delete vd1; > delete vd2; Если тебе дектрукторы вызывать не надо, то сойдет ... > У меня есть подозрения, что в при удалении без приведения типа память > может не полностью освободиться. Освободится полностью. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 13:42:46 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
Ага, если деструктор виртуальный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 14:05:24 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
Т.е. проблема тут в вызове деструкторов? Тогда поясните, пожалуйста, правильно ли я понимаю. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 14:30:26 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
если деструктор виртуальный - то не важно, удаляешь ты указатель на базовый или указатель на потомок: все равно вызовется деструктор потомка. если деструктор обычный - вызовется соответствующий классу указателя. То есть в этом случае деструктор ведет себя как обычная функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 14:41:13 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
2 StepLq Спасибо. А если указатель типа void, то деструктор вообще не вызывается??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 14:47:01 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
Не не вызывается, у него же объектного типа нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 14:51:52 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
Ещё раз всем огромное спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 15:02:11 |
|
||
|
Корректное удаление объектов из памяти. Как правильней?
|
|||
|---|---|---|---|
|
#18+
Aleks_U пишет: > TChild* cld=new TChild; > TParent *par=cld; > void* vd=cld; > > //Будет вызван деструктор и вся память динамически выделяемая > //внутри класса должна освободиться (если её освобождение в деструкторе прописано) > delete (TChild*)par; > delete (TChild*)vd; Такое делать на самом деле нельзя. Ты не будешь всегда знать, что это именно TChild*. Такое делают через виртуальный деструктор в предке. И удаление через указатель на предка. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 18:36:47 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34856956&tid=2028034]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
189ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 481ms |

| 0 / 0 |
