| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Почему не надо уничтожать new объекты? |
| Автор: Dims 3.11.2009, 15:43 |
| Заметил, что объекты DirectShow (и, наверное, все объекты COM), надо создавать на хипе при помощи new, а уничтожать при помощи delete не надо. Как они так сделали? Внутри где-то увидел команду delete this. Она, наверное, не в деструкторе должна быть а просто в каком-то методе? |
| Автор: 17dufa 3.11.2009, 16:15 |
| Dims, у COM объектов насколько мне известно реализован механизм автоматической сборки мусора путем подсчета количества ссылок. |
| Автор: SenkraD 3.11.2009, 16:35 |
| Dims, как и сказал 17dufa у них идёт подстчёт ссылок - AddRef и Release. Собствено, Release и делает (должен делать) delete this, когда счётчик ссылок становится равным нулю. С точки срения стандарта всё ОК, главное потом этот обьект не юзать, для которого delete this был вызван |
| Автор: Alek86 3.11.2009, 17:29 |
| для всяких там комов new делается внутри функции-фабрики, код которой (в частности код выделения памяти, malloc или что-то такое) находится, чаще всего, в dll для симметричности код удаления (free) должен находится в той же dll, иначе можно получить очень странные ошибки, связанные с тем, что dll может быть собрана немного по-другому, а потому реализация функций malloc и free у нее будет отличаться от реализации malloc и free в exe-шке потому для работы со всеми экземплярами классов, реализация которых находится в dll, нужно внутри dll иметь фабрики для создания и функции типа Delete для уничтожения в коме это немного автоматизировано и формализировано |
| Автор: Dims 3.11.2009, 21:03 |
| Спасибо всем! Вроде бы это всё очевидно, но как-то непривычно. Привык, что раз new, значит должен быть delete. А delete this вообще первый раз в жизни встретил |
| Автор: DrHex 5.11.2009, 14:10 |
| Dims не далайте сами COM объектам new, этим должна заниматься фабрика... |