我一直在阅读有关导出C ++类的信息,以便C可以使用它。我从Parashift那里听了这个好example,然后出了一个问题。
为了保存分配给C ++类的内存,我们定义了以下结构
typedef struct A A;
这样A*
可以指向类A的地址。我的问题是:这个指针的类型是否重要?例如,我们不能输入类似的东西:
typedef double A;
因为它可能是负责分配和释放内存的C ++代码。
答案 0 :(得分:4)
不,你不应该使用void*
。指向不完整类型struct A
的指针是一种更好的技术。这可以避免意外地将指针混合到不同的不透明类型。如果你typedef
它void
,你可以将opaque类型的指针分配给任何其他数据指针。可能不是你想要的。
使用不完整的类型可以为您提供一些类型的安全性,完全免费。
答案 1 :(得分:2)
不透明指针最好声明为void*
。
这通常称为Pimpl idiom。
答案 2 :(得分:1)
您应该将void
类型用于任何意图不透明的内容。使用未定义结构的typedef是可以的,因为它的名称可以让你了解它真正指向的内容。