Envoyé par
dalfab
C'est possible dans de rares cas, mais c'est extrêmement complexe.
Si tu crées l'objet, et que tu garantis (au présent et y compris les évolutions futures) que l'objet créé persistera au moins aussi longtemps que ton std::vector<>, mémoriser l'adresse de cet objet fonctionnera.
Mais si l'objet n'est pas persistant (est un temporaire, est une variable locale, est dans une collection persistante mais qui pourrait avoir ses itérateurs invalidés, ...) alors conserver l'adresse ne peut pas fonctionner.
Le moyen le plus sûr est de stocker des std::unique_ptr<> dans le std::vector<>, car alors le std::vector<> devient le propriétaire des objets et on a la garantie que les pointeurs qu'il contient seront toujours valides.
Mais si tu es sûr de la persistance des objets (le cas rare), il est surement plus "lisible" de stocker dans ton std::vector<> des std::reference_wrapper<> de ton objet plutôt que des pointeurs.
Mémoriser des pointeurs est une très mauvaise idée.
Partager