将字符串返回到SWIG python接口的最佳方法是什么?

时间:2014-07-07 14:52:02

标签: python c++ string memory-management swig

什么是线程安全且无内存泄漏的方法将字符串从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垃圾收集器会照顾它),但我不知道该如何去做,我想知道如果有更简单的方法。

1 个答案:

答案 0 :(得分:6)

SWIG创建包装代码以在C ++ std::string和Python字符串之间进行转换,如果包含std_string.i中定义的类型映射。