Обнаружена утечка памяти ... деструктор не найден - для перечислений - PullRequest
4 голосов
/ 21 октября 2010

Речь идет о встроенном Python с использованием swig.

У меня std::map<enum, std::string>, доступный для Python (встроенный Python).Когда скрипт выполняется, swig выдает в конце следующее «предупреждение» в конце (когда карта выходит за рамки видимости):

swig / python обнаружил утечку памяти типа 'std:: map
... деструктор не найден

Файл .i:

enum MyEnum {
 ...
};

typedef std::map<MyEnum, std::string>  MyTypedef;
%template(MyTypedef) std::map<MyEnum, std::string>;

Все в порядке, если я заменюMyEnum с int по всему коду.Не знаю, почему swig нуждается в специальном уничтожении, когда перечисления не являются PyObjects!Я что-то пропустил?Есть ли какие-нибудь %magic_operator, которые помогут.
Примечание: я не хочу подавлять предупреждение о "утечке памяти" все вместе.

Внимательно посмотрел на обертку, созданную swig, но напрасно.

1 Ответ

0 голосов
/ 09 февраля 2011

Может быть проблема с порядком объявления: шаблон std :: map% должен быть объявлен ПОСЛЕ добавления MyEnum к интерфейсу SWIG.

В прошлом мне не удавалось этого сделать (хотя в моем случае ключ карты представлял собой псевдоним typedef для неподписанного целого числа), и я увидел точно такой же набор симптомов, о котором здесь сообщалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...