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

Mat*_*att 6 c++ python string swig memory-management

什么是线程安全且无内存泄漏的方法将字符串从C++返回到SWIG python接口?

SWIG会自动将char *返回值的内容复制到python字符串中.这个SWIG指南给出了一个例子:

char *__str__() {
    static char temp[256];
    /* WRITE STUFF TO STRING */
    return &temp[0];
}
Run Code Online (Sandbox Code Playgroud)

他们的示例使用静态字符串作为返回值,但如果我的C++程序有多个线程,它们可以轻松覆盖彼此的字符串.

返回新分配的字符串会产生内存泄漏,因为SWIG不知道要释放它.

我唯一能想到的就是注册并返回一个指向实际python字符串对象的指针(这样python垃圾收集器会照顾它),但我不知道该怎么做,我想知道是否有更简单的方法.

Oli*_*ver 6

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