我需要在C代码中使用C++类。
使用这样的C++类:

class MyClass
{
public:
    void myFunction()
    {
        cout << "Value = " << m_value;
    }

private:
    int m_value;
};

我有以下包装纸:
typedef void CMyClass;

#ifdef __cplusplus
extern "C" {
#endif

CMyClass * new_MyClass();
void c_myFunction(const CMyClass * ptr);
void c_dispose( ??? ); // to delete/destruct

#ifdef __cplusplus
}
#endif

// implementation below:

CMyClass * new_CMyClass()
{
    MyClass * ptr = new MyClass();
    return (CMyClass*)ptr;
}

void c_myFunction(const CMyClass * ptr)
{
    MyClass * tmp = (MyClass*)ptr;
    tmp->myFunction();
}

void c_dispose( ??? )
{
    /* ??? */
}

我只想确保我的c_dispose函数不会出现内存泄漏、僵尸指针等问题。
如何正确编写c_dispose(???)的完整代码以删除先前创建的(带有new_CMyClass()的)对象实例?

最佳答案

一个可能的解决方案是,一旦你把C类型转换成C++类,就简单地调用delete

void c_dispose(CMyClass * ptr){
    MyClass * tmp = (MyClass*)ptr;
    delete tmp;
}

10-06 02:13