Я пытаюсь обернуть std :: map с помощью SWIG в python, и он работает хорошо, за исключением того, что он теряет память (мой код ниже).
Очевидно, SWIG автоматически освобождает память возвращаемого объекта (Tuple
), но не освобождает выделенную внутри String
.Я прочитал, что могу использовать явное освобождение, используя %typemap(newfree)
, но не знаю, как реализовать.
%typemap(out) std::pair<std::string, double> {
$result = PyTuple_Pack(2, PyUnicode_FromString($1.first.c_str()),
PyFloat_FromDouble($1.second));
};
%typemap(newfree) std::pair<std::string, double> {
// What to do here?
// delete[] $1.first.c_str() clearly not the way to go...
}