从Matlab调用c++类(具有内存持久性)

Calling a C++ class from Matlab (with memory persistance)

本文关键字:内存 持久性 Matlab 调用 c++      更新时间:2023-10-16

我如何从matlab调用c++类(.cpp和.h文件),使其在内存中保持持久性,直到使用完成,然后我释放它?

的例子:一个可以无限期保持的matlab GUI。在启动时,分配c++类。只要GUI在运行(即使在空闲模式下),类就保持持久化,并等待GUI调用它的方法。当用户关闭GUI时,类被释放。

谢谢。

有一个如何在MATLAB中央文件交换中做到这一点的示例。它是由一些MathWorks开发人员贡献的,并展示了如何通过mex接口在MATLAB类中包装c++类,安全,没有内存泄漏,同时在MATLAB中实现类似于底层c++接口的接口。

我认为您想要的是创建InitExit函数,它们为类分配和释放内存。当您的GUI启动时,应该调用Init,当您完成时,应该调用Exit。你可以这样实现它(未经测试,也不知道这个方法有多安全,也不要乱顺序调用Init/Exit):

class MyClass
{
public:
    MyClass(int a) : m_A(a) {}
private:
    int m_A;
};
MyClass* instance;
void Wrapper_Init(void)
{
    instance = new MyClass(5);
}
void Wrapper_Exit(void)
{
    delete instance;
}

您可以编写其他函数来访问/操作MyClass的实例。这感觉有点像为一个漂亮的c++类创建一个丑陋的C包装器,但我不知道还有什么更优雅的解决方案。

参见:http://au.mathworks.com/matlabcentral/answers/783-i-have-a-c-class-how-can-i-interface-to-it-through-a-matlab-class