C不透明指针陷阱

Cat*_*ann 4 c c++ typedef opaque-pointers

我正在使用传统的C库接口(到C++),将不透明指针公开为

typedef void * OpaqueObject
Run Code Online (Sandbox Code Playgroud)

在图书馆:

OpaqueObject CreateObject()
{
   return new OurCppLibrary::Object();
}
Run Code Online (Sandbox Code Playgroud)

这当然为该库的客户提供绝对没有类型安全性.应该将typedef从void指针更改为结构指针的工作方式完全相同,但提供少量类型的安全性?

typedef struct OpaqueObjectInternal_ *OpaqueObject 
// OpaqueObjectInternal_ is NEVER defined anywhere in client or library code
Run Code Online (Sandbox Code Playgroud)

是否有任何对齐问题或其他陷阱我现在必须担心我明确指向一个结构,即使我真的没有指向一个?

GMa*_*ckG 7

没有陷阱; 因为类型安全,这种形式是首选.

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