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

时间:2015-08-17 05:01:31

标签: c++ matlab

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

实施例: 一个可以无限期保持的matlab GUI。在启动时,分配C ++类。只要GUI正在运行(即使在空闲模式下),该类仍然是持久的,并等待GUI调用其方法。当用户关闭GUI时,将释放该类。

感谢。

2 个答案:

答案 0 :(得分:2)

如何在MATLAB中央文件交换中执行此操作example。它由一些MathWorks开发人员做出贡献,并展示了如何通过mex接口安全地在MATLAB类中包装C ++类,而没有内存泄漏,同时在MATLAB中实现类似于底层C ++接口的接口。 / p>

答案 1 :(得分:1)

我认为你想要的是创建一个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