Je travaille avec une interface de bibliothèque héritage C (en C++) qui expose des pointeurs opaques commeC pointeur opaque Gotchas
typedef void * OpaqueObject
Dans la bibliothèque:
OpaqueObject CreateObject()
{
return new OurCppLibrary::Object();
}
Bien sûr, ne fournit absolument pas type de sécurité pour les clients de cette bibliothèque. Devrait changer le typedef d'un pointeur vide au pointeur de structure fonctionne exactement la même chose, mais fournir une petite quantité de sécurité de type?
typedef struct OpaqueObjectInternal_ *OpaqueObject
// OpaqueObjectInternal_ is NEVER defined anywhere in client or library code
Y at-il des problèmes d'alignement ou d'autres trucs que je dois à vous soucier maintenant que je montre explicitement à une structure, même si je ne suis vraiment pas en montrant un?
Il n'y a pas d'opérateur appelé 'nouveau' dans ** C ** !! – Mahesh
@Mahesh: Je pense que l'OP enveloppe une bibliothèque C en C++; le 'new' se déroule en C++ (déduit du qualificatif' OurCppLibrary') – fbrereto
'void *' est tout à fait logique en tant qu'objet opaque - votre fin de choses ne va pas déranger l'objet, et ils savent quoi fais avec. Si quelque chose, en faire un «void *» le rend plus sûr, tant que vous l'utilisez avec leur API comme décrit. – James