【发布时间】:2021-03-10 08:28:39
【问题描述】:
可以在C++ class 和C structure 之间转换吗? (这里的用例是我有两个不同的项目,一个在C++,另一个在C,我有一个接口可以连接两个项目)
我尝试了一些示例,其中两个(C++ class 和C structure)具有相同的成员函数和成员变量,并且效果很好。但是一旦它们中的任何一个缺少成员函数/变量,它就不起作用并且强制转换不会为成员变量提供正确的值。
我注意到的一件事是,如果我向 C++ class 添加析构函数,只要未定义析构函数 virtual,这将正常工作?
在C++:
class myClass{
public:
myClass() {}
~myClass(){} // if I define this destructor as virtual the casting fails
int var;
};
在C:
struct myStru {
int var;
};
选角C
myStru *struObj = (myStru*)malloc(sizeof( myStru));
struObj = (myStru*) classObj; // classObj is a void pointer that is passed to the `C` project and it was created in the `C++` project
编辑: 我在这篇文章中找到了我的问题的一个很好的答案(请参阅从 C 中访问 C++ 类): https://www.oracle.com/technical-resources/articles/it-infrastructure/mixing-c-and-cplusplus.html
【问题讨论】:
-
去掉
= (myStru*)malloc(sizeof( myStru)),否则会导致内存泄漏。 -
previous question 的答案已经告诉你不能这样做(因为它会调用 未定义的行为),这有什么不同?
-
这能回答你的问题吗? stackoverflow.com/questions/65037779/…
-
@UnholySheep 这里有一些答案(例如@Ted Lyngmo 的答案)表明这是可能的。我会保留这两个问题,因为这里的答案很有用。此外,这个问题主要是关于类的析构函数。我同意这两个问题相对接近,但这里的答案更有用。
-
@idclev463035818 这里的答案更有用。我在这里提出了不同的问题,希望得到其他答案,现在就是这种情况。请参阅下面的@ Ted Lyngmo 的回答,这很有帮助。谢谢!