Вот, отличное объяснение xDOldestkon написал(а):Полная противоположность конструктора.
Ну попробую я объяснить. Есть объект класса, вот он собрался,там цвет,имя и т.д.,всё вот объект на этом куске кода не понадобиться. Память занята этим объектом. Тут появляется деструктор. объект уничтожается.anti344 написал(а):Вот, отличное объяснение xDOldestkon написал(а):Полная противоположность конструктора.
Только что читал статью, "Java делает всякое такое за вас, поэтому она проще, но в C++ у вас больше контроля над памятью(что позволяет быть мощнее), так что если вы не знаете, что вы делаете, то рекомендую Java".
Да понял я, я же не RaVeNSkarlet написал(а):Ну попробую я объяснить. Есть объект класса, вот он собрался,там цвет,имя и т.д.,всё вот объект на этом куске кода не понадобиться. Память занята этим объектом. Тут появляется деструктор. объект уничтожается.anti344 написал(а):Вот, отличное объяснение xDOldestkon написал(а):Полная противоположность конструктора.
Только что читал статью, "Java делает всякое такое за вас, поэтому она проще, но в C++ у вас больше контроля над памятью(что позволяет быть мощнее), так что если вы не знаете, что вы делаете, то рекомендую Java".
Более легче: Ты собрал крипера из лего, тебе он надоел, место занимает. Вот ты и разбираешь.
Ну это уже подробнее, но опять-таки, я понял.mrEDitor написал(а):Деструктор пришел к нам из лесов C, которые растут быстрее, чем Java, и в которых нет GC-лесников.
В Java выделение памяти происходит при создании объекта по obj = new Object(), после чего использованный и ненужный объект можно просто "забыть", потерев укзатели на него, obj = null или obj = new Object() (и в этом случае старый тоже потеряется). Через некоторое время GC доберется до него, обработает ссылки внутри, как нерабочие и удалит объект.
В C выделять память можно двумя способами:
1) локально (из стека, живет, как и в Java, до конца блока кода): object = Object()
2) из heap'а ОС:
2A) для объектов через *obj = new Object()
2B) "на будущее": *mem = malloc(bytes), *mem = malloc(count, bytes)
После выделения из heap'а уже не нужную память обязательно нужно вернуть обратно в heap ОС (освободить) - 2A) delete obj и 2B) free(mem). Иначе будет происходить утечка памяти (memory leak), растущая с каждым объектом, "унесшим память с собой в могилу", что приведет к своего рода OutOfMemory. Для этого и существует деструктор - если в конструкторе некий объект занимает память, ему придется ее вернуть в хип. Но объекты имеют привычку умирать в самых неожиданных местах кода, так и не освободив память. Именно поэтому деструктор гарантированно вызывается при смерти объекта.