Bonjour,
J'ai fait un petit moteur de physique du point. Dans ce moteur, il y a l'objet moteur, les objets points et les objets interactions (force de friction, de gravité, etc)
Les points sont dans des shared_ptr.
Pour un point donné, toutes les interactions qui l'utilise ainsi que le moteur ont un weak_ptr vers celui ci. Lorsque le point est supprimé, il faut donc prévenir le moteur et les interactions de ne plus l'utiliser.
Pour cela, j'ai fait le système suivant:
- un point a la liste de l'ensemble de ceux qui ont un weak_ptr vers lui.
- ceux qui utilisent un Point ont une méthode RemovePoint( weak_ptr<Point> iPoint ), qui signifie qu'ils doivent arreter d'utiliser iPoint.
- Lors de l'appel à son destructeur, un point appelle sur chaque objet de sa liste d'utilisateur la méthode RemovePoint, avec shared_from_this() en tant que paramètre, pour leur dire d'arreter de l'utiliser.
Malheureusement, cela ne marche pas car shared_from_this plante à l'éxécution lorsqu'il est appelé dans le destructeur. On dirait qu'on ne peut pas utiliser shared_from_this dans le destructeur.
Savez vous si c'est vrai?
Connaissez vous une meilleure méthode pour prévenir les objets ayant un weak_ptr que l'objet pointé est détruit?
Merci d'avance!!!
Partager