Обнаружена утечка памяти Swig/Python

У меня очень сложный класс, для которого я пытаюсь сделать обертки Python в SWIG. Однако, когда я создаю экземпляр элемента в Python, я не могу инициализировать определенные элементы данных без получения сообщения:

>>> myVar = myModule.myDataType()
swig/python detected a memory leak of type 'MyDataType *', no destructor found.

Кто-нибудь знает, что мне нужно сделать, чтобы решить эту проблему? Есть ли флаг, который я мог бы использовать для создания деструкторов?

Ответ 1

SWIG всегда генерирует оболочки деструктора (если не используется директива %nodefaultdtor). Однако в случае, если он ничего не знает о типе, он создаст непрозрачную оболочку указателя, которая вызовет утечки (и вышеприведенное сообщение).

Пожалуйста, убедитесь, что myDataType - это тип, известный SWIG. Повторно запустите SWIG с включенными сообщениями отладки и проверьте все сообщения, похожие на

Nothing is known about Foo base type - Bar. Ignored

Получение сообщения, как указано выше, означает, что SWIG не знает вашу иерархию типов в полной мере и, следовательно, работает с ограниченной информацией, что может привести к ее не генерации dtor.

Ответ 2

Сообщение об ошибке довольно ясно для меня, вам нужно определить деструктор для этого типа.