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垃圾收集器会照顾它),但我不知道该怎么做,我想知道是否有更简单的方法.