什么是线程安全且无内存泄漏的方法将字符串从C ++返回到SWIG python接口?
SWIG会自动将char *
返回值的内容复制到python字符串中。 This SWIG guide给出了示例:
char *__str__() {
static char temp[256];
/* WRITE STUFF TO STRING */
return &temp[0];
}
他们的示例使用静态字符串作为返回值,但如果我的C ++程序有多个线程,则它们可以轻松覆盖彼此的字符串。
返回一个新分配的字符串会产生内存泄漏,因为SWIG不知道要释放它。
我唯一能想到的就是注册并返回一个指向实际python字符串对象的指针(这样python垃圾收集器会照顾它),但我不知道该如何去做,我想知道如果有更简单的方法。
答案 0 :(得分:6)
SWIG创建包装代码以在C ++ std::string
和Python字符串之间进行转换,如果包含std_string.i
中定义的类型映射。