我正在使用旧版C库接口(interface)(到C++),该接口(interface)将不透明指针公开为
typedef void * OpaqueObject
在图书馆:
OpaqueObject CreateObject()
{
return new OurCppLibrary::Object();
}
当然,这绝对不会为该库的客户提供类型安全。将typedef从void指针更改为结构指针是否应该完全一样,但是提供少量的类型安全性?
typedef struct OpaqueObjectInternal_ *OpaqueObject
// OpaqueObjectInternal_ is NEVER defined anywhere in client or library code
现在我明确地指向一种结构,即使我真的没有指出任何对准问题或其他陷阱,我也要担心吗?
最佳答案
没有陷阱。由于类型安全性的缘故,这种形式是首选。
不,对齐在这里不是问题。指针本身具有已知的对齐方式,它将指向的对象的对齐方式仅与库实现有关,而与用户无关。