objetos Perl5 quedar destruido tan pronto como la última referencia a ellas desaparece, a menos que tenga estructuras auto-referencial (véase el párrafo Destructors y la recolección de basura dos fases después de que por alguna información interesante).
Si no tiene referencias automáticas, no necesita preocuparse por nada, se llamará al método DESTROY
cuando sea necesario; tratar de destruir el objeto usted mismo no estaría seguro (¿cómo puede estar seguro de que el objeto no es referencia en otro lugar), a menos que también esté haciendo recuentos de referencia usted mismo (si eso es realmente posible y eso duplicaría los esfuerzos de Perl, que no es una buena idea).
así que diría que, siempre y cuando usted no tiene referencias cíclicas:
- Si desea liberar los recursos externos en un punto específico en el código, lo hace de forma explícita con un
release
/close
/dispose
/cualquier método (que su código DESTROY
podría llamar también).
- Si realmente no te importa que ese lanzamiento ocurra exactamente en ese punto de tu código, solo que finalmente se llama, no te preocupes.
- No se preocupe por el objeto perl en sí.
Si usted tiene referencias cíclicas, que tendrá que ser mucho más cuidadoso, y utilizar referencias débiles (ver Scalar::Util
) para romper los ciclos.
(En otras palabras, no sé de una manera explícita delete
un objeto Perl. Eso no funciona bien con un sistema de recolección de basura de referencia contado.)
¿Está seguro de que los objetos se destruirán exactamente después de que no se vuelvan a hacer referencia? ¿Conoces alguna fuente autorizada que lo confirme? Pensé que ese tipo de comportamiento no estaba garantizado por el recolector de basura. – Sam
El documento que cité: "Cuando la última referencia a un objeto desaparece, el objeto se destruye automáticamente". Pero como dije, hágalo explícito si desea liberar recursos externos en un punto determinado. Esto es para perl5 por cierto, perl6 potencialmente tiene un esquema de colección de diferencia. – Mat