Comportement erratique en héritage
Bonjour à tous, mon problème a certainement été évoqué mais tous mes axes de recherche mènent à des recherches infructueuses...
Le voici donc :
J'ai développé 2 classes dont une qui est la fille de l'autre
headers :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class Parent {
int val;
Parent();
virtual ~Parent();
void start(void);
virtual void run(void);
}
class Enfant : Parent {
Enfant();
virtual ~Enfant();
void run(void);
} |
implémentation :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Parent::Parent() { }
Parent::~Parent() { }
void Parent::start() {
boost::thread(boost::bind(&Parent::run, this));
}
void Parent::run() { std::cout << "problème" << std::endl; }
Enfant::Enfant() { }
Enfant::~Enfant() { }
void Enfant::run() { std::cout << "Ok" << std::endl; } |
voici mon main :
Code:
1 2 3 4 5
|
main() {
Enfant enfant;
enfant.start();
} |
Vous l'avez compris je devrais avoir dans 100% des cas :
"Ok"
Malheureusement en réalité je n'ai ce résultat que dans 90% des cas environ. Parfois il m'affiche "Problème", ce qui signifie que la méthode run() du parent a été appelée...
J'en déduis que l'appel a start a été effectué dans le parent et éventuellement que l'enfant n'a même pas été complètement instancié.
Que dois-je en conclure ? Est-ce un problème conceptuel ou bien d'implémentation ? Est-ce une particularité de boost::thread que je n'aurais pas pris en compte ?
Merci pour votre aide
Tristan