J'ai une bibliothèque partagée lib.so
contenant une classe Foo
. Je charge dynamiquement (avec dlopen
sous UNIX) lib.so
. Après le chargement, je veux créer une instance de Foo
.
Puis-je utiliser simplement new
opérateur pour créer un objet de Foo
, ou je devrais créer une méthode d'usine exportée placé dans lib.so
qui va créer cet objet pour moi?Le constructeur d'une classe d'une bibliothèque partagée est-il exporté?
En fait la question serait si le constructeur de Foo
est exporté et s'il pourrait simplement être appelé avec l'opérateur new
. Je pense que toutes les classes et méthodes dans la bibliothèque partagée sous UNIX sont exportées par défaut, et je n'ai pas besoin de les exporter explicitement comme sous Windows.
En plus de cacher la façon de créer (et éventuellement l'initialisation) objet de Foo
, y at-il d'autres raisons d'utiliser la méthode de l'usine lors de la création objet de la classe contenu dans la bibliothèque partagée?
Je crois que GCC maintient une API C++ compatible à la version 3.3.6. Voir http://stackoverflow.com/questions/3718746/g-version-compatibility –
@Zan: cela ne change pas le problème: un utilisateur avec un autre compilateur ne pourrait pas importer les objets partagés compilés avec gcc. –
Vous avez dit "différentes versions du * même * compilateur", c'est pourquoi j'ai fait le commentaire. –