1) Entendi que o método destruct é chamado depois que o garbage collection faz a ação de excluir os objetos instanciados que não possuem referência certo? a. Se isso acima é correto não faz sentido nossa impressão do programa. Ele imprime a frase do método destruct e logo em seguida diz que tem 3 contas que foram instanciadas. Se o garbage collection excluiu a instância sem referência, na verdade deveria aparecer o número 2 ali não?:
2) Eu não tinha entendido porque a frase do método destruct tinha sido impressa mais 2 vezes depois do número 3 aparecer, pois pensei que por as instâncias anteriores terem referência, o garbage collection deixaria elas lá. Porém vi uma explicação aqui no fórum de alguém dizendo que depois que o programa acaba de executar que são apagadas todas as instâncias não mais utilizadas (até aquelas com referências que temos). Essa explicação estaria certa?
3) O professor deu o exemplo de que se eu tivesse aberto um arquivo no construtor, eu poderia fechá-lo no destrutor e isso me deu duas dúvidas: a. O Garbage Collection já não fecharia esse arquivo para nós? b. Se logo depois que o programa termina de executar, o Garbage Collector age automaticamente, porquê se preocupar de fechar um arquivo se o programa não está executando mais?
4) Fique na dúvida para que eu usaria esse método destruct. Existe um exemplo mais concreto?