Bonjour à tous,
Débutant avec les pointeurs intelligents (vieux motard que jamais ) j'ai rencontrer un problème qui a soulevé plusieurs questions.
Je vous pose le contexte de maniérè très simplifié : Je suis en train de créer un petit "tower défense" (dans un but pédagogique) qui contient des Cases qui contiennent des "éléments de jeu" (dans une collection quelconque de weak_ptr puisque la Case ne souhaite pas gérer la mémoire mais uniquement pouvoir regarder s'il y a des gens dedans). Une case est dite "occupé" si il y a au moins un élément de jeu dedans. J'ai ensuite créé une Tour qui est un élément de jeu et qui prend en paramètre du constructeur une case.
Et voila, le drame arrive :
Et c'est le Bad_Weak_Ptr \o/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Tour(Case& maCase) { [...] maCase.addElementJeu(shared_from_this()); }
Un coup de google, on me dit que mon objet est pas completement construit et que je peux pas faire ça... Ok. Bon pas dramatique je vais faire une fonction statique [type de retour à réfléchir] CreerTour(Case&), un constructeur en protected et j'aurais ce que je veux.
Cependant j'ai deux questions que j'arrive pas résoudre :
- Comment la fonction shared_from_this sait que j'ai pas fini le constructeur, je veux dire, elle vient d'une classe mère qui devrait être initialisé avant de rentrer dans le constructeur, comment elle sait que l'objet est pas fini d’être construit ?
- Qu'est ce que ça veux dire ne pas être complétement construit ? Qu'est ce que mon objet a concrètement de plus entre la dernière ligne de mon constructeur et le moment ou il est construit ?
- Ce que je faisais avant (quand j'utilisais pas les qqch_ptr) aurait était de faire maCase.addElementJeu(this) je suppose qu'il doit aussi y avoir un problème d'objet mal construit mais je vois pas lequel...
Et oui ça fait trois questions \o/
Si vous pouvez m'éclairer, je suis preneur
GrosLapin
Partager