我正在使用旧版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

现在我明确地指向一种结构,即使我真的没有指出任何对准问题或其他陷阱,我也要担心吗?

最佳答案

没有陷阱。由于类型安全性的缘故,这种形式是首选。

不,对齐在这里不是问题。指针本身具有已知的对齐方式,它将指向的对象的对齐方式仅与库实现有关,而与用户无关。

07-24 18:35