Ctypes и alloc
В биндинге для Python libmapi (который я пишу, с использованием ctypes), возникла следующая задача: есть куски кода, где надо выделить память через вызовы talloc. Желательно, чтобы память сама освобождалась, когда переменная, в которой у меня указатель на эту структуру, исчезает.
Оказывается, в ctypes можно легко обернуть эти вызовы в свой класс и использовать обычный деструктор, чтобы это сделать. При этом, ctypes, чтобы получить внутреннее значение, просто берёт свойство «_as_parameter_» класса.
Получился вот такой код:
class mapi_talloc(object):
def __init__(self, lib):
self._lib = lib
self._as_parameter_ = lib.talloc_init('python-mapi-object:' + str(hash(self)))
def __del__(self):
self._lib.talloc_free(self._as_parameter_)