我正在开发一个用C++编写的小型应用程序,希望在我的平台上使用。不幸的是,我们的交叉编译工具链只(可靠)提供了一个C编译器。我看了这个应用程序,它相当简单,只在几个地方使用了C++特定的习惯用法,所以我想我只需要手工将它转换成C代码。
我碰到一条线,我不知道该怎么处理。代码使用Termios打开一个新端口来与TTY流对话,并使用new关键字初始化Termios结构。
termios *settings = new termios();据我所知,new关键字除了分配适当的内存外,还调用对象的初始化器。在C中,在我用malloc分配内存之后,我可以手动调用初始化器吗?我需要吗?
我有一种感觉,我误解了一些显而易见的/基本的东西,或者我看错了。我不太习惯C++代码。
编辑:我似乎引起了一些混乱。上面的代码行是创建一个在termios.h中定义的新termios结构,它是C的大多数实现上的标准库的一部分。
发布于 2014-11-20 18:43:02
线
termios *settings = new termios();为termios对象分配内存并对其进行值初始化。因为termios是过氧化物酶,所以等价物C应该是
struct termios* settings = calloc(1, sizeof(*settings));或
struct termios* settings = malloc(sizeof(*settings));
memset(settings, 0, sizeof(*settings));当然,相当于delete settings的是free(settings)。
发布于 2014-11-20 18:34:58
我建议创建一个函数
termios *new_termios()这将将malloc与构造函数代码结合起来。之后,不要使用malloc来分配termios。
发布于 2014-11-20 18:35:01
“在C中,在我用malloc分配内存之后,我可以手动调用初始化器吗?
不幸的是你不能。
我需要吗?“
它实际上取决于termios对象的定义。基本上,malloc所做的只是分配一块内存。也就是说,它不像构造函数那样执行任何初始化和内部内存分配。
我在这种情况下所做的事情:
我通过不透明指针为我的C++对象创建C包装函数。例如,为了调用C++对象的构造函数,我将在一个.cpp文件中为C创建一个C++包装器:
void* create_termios() { return new termios(); }
void destroy_termios(void *obj) { delete obj; }
// other wrapper functions for termios然后我用C语言将这些函数与一个.h文件连接起来:
extern "C" {
void* create_termios();
void destroy_termios(void *obj);
// declare any other necessary wrappers
}https://stackoverflow.com/questions/27046806
复制相似问题