python - Swig - 存储未知对象直到下一次调用 C++ 函数

标签 python c++ swig

我在 python 中使用 swig 来调用用 C++ 编写的函数 myfunc()。每次调用 myfunc() 时,我都必须生成相同的巨大稀疏矩阵。相反,我想做的是创建一次矩阵,然后将矩阵的指针传递给 python,而不是每次都重新分配空间。我担心的是这可能会导致某种内存泄漏。

最好的方法是什么?

矩阵是 Eigen::SparseMatrix 的一部分。

是否可以简单地来回传递指针来节省时间? Python 不知道如何处理它,但只要空间保持分配状态,我就能在 C++ 中重用指针吗?

最佳答案

这正是 swig 处理未知对象的方式:它传递指向对象的指针以及一些类型信息(字符串)。如果一个函数采用该类型的指针作为参数,swig 会很乐意将那个指针传递给它。请参阅 swig 文档 here .

您只需确保类型匹配,即您不能传递 MatrixXd*。到 python 并在函数中使用它 MatrixBase<MatrixXd>* ,因为 swig 不知道这些类型是兼容的。

此外,对于未知对象(至少是指向此类对象的指针),swig 不会进行任何内存管理,因此您需要在 C++ 端分配和释放对象。

关于python - Swig - 存储未知对象直到下一次调用 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33892379/

相关文章:

python - "is"在 python 中如何工作?

c++ - 两个伴随的类层次结构 - 一个好的设计模式?

c++ - 为什么 g++ 不使用 -I 选项?

c++ - 观察无锁队列的大小

python - 创建一个缓冲区并在 Python 中为其分配一个指针

python - 如何使用 PIL(python 成像)创建透明 gif(或 png)

python - Pycharm:实际上更改包的名称

python - SWIGging Boost.Geometry 时出现 "Syntax error in input"?

c++ - Swig + tcl + c++(内存管理)

python - 打开文件的最pythonic方式是什么?