Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvidas sobre o método destruct

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?:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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?

2 respostas
solução!
  1. Eu preciso ler seu código para saber o que significa essa saída dele. Só olhando o que está sendo exibido não consigo te explicar.
  2. Sempre que o programa é encerrado nossas variáveis são destruídas, logo, os objetos não terão mais referências para eles, logo, serão destruídos (e terão seus destrutores executados).
  3. O garbage collector não teria como saber que aquele recurso não está mais sendo usado por nós. Ele só liberaria esse recurso ao encerrar a aplicação. Até a aplicação ser encerrada o arquivo estará aberto e ocupando um recursos do sistema operacional como memória para armazenar os detalhes de file descriptor. São detalhes mais "baixo nível" e no geral você não vai ter grandes problemas com esses pequenos desperdícios de recursos, mas o ideal é sempre fazer o correto para que em casos maiores, com mais recursos sendo consumidos, nós já estarmos utilizando-os da forma mais otimizada.
  4. Honestamente, raramente é usado. rsrsrs

Bom dia. Obrigada pelas respostas. Sobre a 1) Eu não lembro mais o código que tava pois no final da aula foi modificado, mas era o mesmo que estava inicialmente no vídeo mostrando essa frase. Porém acho que deu para entender.