Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

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_)
Ctrl ←Имболк
Ctrl →Сток