在 C 中使用 C++ 类:如何正确编写某种 "delete/dispose" 函数?

Using C++ classes in C: How to properly write some sort of "delete/dispose" function?

本文关键字:delete 函数 dispose 何正确 C++      更新时间:2023-10-16

我需要在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;
}