Bonjour,
Je dois utiliser des bibliothèques dynamiques dans un projet, et j'aimerais avoir des conseils pour le faire proprement.

Première chose, histoire de limiter les risques de fuites mémoire, j'ai réalisé un wrapper pour la gestion des bibliothèques, avec la classe d'exception qui va bien.
Chaque objet gère un descripteur de bibliothèque, et la fonction « dlclose() » est appelée quoi qu'il arrive.
Bon, ça existe peut-être déjà, mais pas dans le standard (enfin pas à ma connaissance…), et puis c'est tellement compliqué à faire…
Bref, tout ça fonctionne, le problème n'est pas là.

En fait, le nombre de bibliothèques à charger peut varier énormément d'une exécution à l'autre, ainsi que les symboles à chercher.
Et c'est impossible à prévoir l'avance.
Il peut même arriver qu'aucune bibliothèque ne soit chargée.
De plus, on ne sait pas dans quelle bibliothèque particulière chercher chaque symbole ; tout ce que l'on connaît, c'est leur type.

S'il faut se coltiner tous les descripteurs, même avec mon wrapper, ça peut vite devenir lourd…
Donc il faudrait une interface qui permette de gérer de manière transparente les bibliothèques chargées.

On peut penser à une classe où chaque instance est en réalité une collection des objets pré-cités, ou même simplement une collection de descripteurs.
Mais étant donné que l'on travaille avec toutes les bibliothèques chargées, ça ne me paraît pas cohérent (correct ?) d'avoir la possibilité de créer plusieurs instances.
Ou alors, il faut utiliser le design pattern « singleton ».

Ceci dit, d'un point de vue extérieur à la classe, donner la responsabilité de l'ouverture des bibliothèques, de leur fermeture, et de la recherche des symboles à un objet me paraît étrange, pas très naturelle/intuitive.
Je ne saurais exprimer exactement pourquoi…
Je verrais plutôt une classe qui ne fournit (avec une visibilité publique) que des fonctions membres statiques.

Alors, avant même de s'intéresser à des questions d'implémentation, quel est votre sentiment à ce sujet ?
Verriez-vous plutôt un singleton ou une classe non instanciable pour remplir ce rôle ? (et pourquoi ? )
Ou autre chose ?

Je vous remercie d'avance pour les nombreuses remarques que vous allez laisser , et que je ne manquerai pas de lire avec attention.