Je vais prendre un exemple pris de mon code actuel (ici, ce n'est pas vraiment un effet de bord du constructeur, mais simplement une utilisation non-explicile d'un objet) :
J'ai un enssemble de classes dérivant toutes d'une même classe de base, avec une seule instance de chaque classe. Chacune de ces classes représente un module de mon application.
//en-tête API de ma librairie
class base {
base() : next(first) { first = this; }
static base* first;
base* next;
}
//Code c++ de la librairie
base* base::first = NULL;
classe derivee : public base { }
derivee unUniqueObjet;
//code du main
base * current = base::first;
while (current) {
printf("coucou\n");
current = current->next;
}
Dans ce cas, le main devrait afficher "coucou", mais ce n'est pas le cas car le linker considère que l'objet "unUniqueObjet" n'est pas utilisé par main, et il me le vire à l'edition des liens.
Si je déclare "unUniqueObjet" dans le main, ça fonctionne. Mais j'aimerais autant ne pas le faire : ça m'évite d'avoir plein de choses inutiles dans les en-têtes.
[^] # Re: Bonne question
Posté par sn00py . En réponse au message ld me détruit des symboles importants. Évalué à 1.
//en-tête API de ma librairie class base { base() : next(first) { first = this; } static base* first; base* next; }//Code c++ de la librairie base* base::first = NULL; classe derivee : public base { } derivee unUniqueObjet;//code du main base * current = base::first; while (current) { printf("coucou\n"); current = current->next; }Dans ce cas, le main devrait afficher "coucou", mais ce n'est pas le cas car le linker considère que l'objet "unUniqueObjet" n'est pas utilisé par main, et il me le vire à l'edition des liens. Si je déclare "unUniqueObjet" dans le main, ça fonctionne. Mais j'aimerais autant ne pas le faire : ça m'évite d'avoir plein de choses inutiles dans les en-têtes.