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