Имеется популярнейшая библиотека работы с XML - libXML2.
Биндинги для неё есть для практически всех скриптовых языков. Есть они и для Python.
http://xmlsoft.org/python.html
смотрим пример кода
import libxml2, sys
doc = libxml2.parseFile("tst.xml")
if doc.name != "tst.xml":
print "doc.name failed"
sys.exit(1)
root = doc.children
if root.name != "doc":
print "root.name failed"
sys.exit(1)
child = root.children
if child.name != "foo":
print "child.name failed"
sys.exit(1)
doc.freeDoc()
разглядываем приведенный пример и задумываемся над последней строкой.
ХГМ.
Поскольку у Python «имеется» прекраснейшая возможность писать деструкторы к скалярам, то вот такая выдержка из документации имеет место быть:
Also note the need to explicitly deallocate documents with freeDoc() . Reference counting for libxml2 trees would need quite a lot of work to function properly, and rather than risk memory leaks if not implemented correctly it sounds safer to have an explicit function to free a tree. The wrapper python objects like doc, root or child are them automatically garbage collected.
Изучая эту библиотеку подробнее - выходим на прекрасные функции
- freeDoc
- xpathFreeContext
- и так далее
Расскажите мне почему нормальные деструкторы программисту не нужны.