2010-11-04 29 views
2

Boost :: La sérialisation a un support intégré pour boost::shared_ptr<>. Y at-il un moyen d'utiliser ce support pour std::tr1::shared_ptr<> aussi?
Est-il possible de passer de std::tr1::shared_ptr<> à boost::shared_ptr<>?Boost Serialization - Sérialiser std :: tr1 :: shared_ptr?

+0

Si vous pouvez utiliser boost de toute façon, pourquoi n'utilisez-vous pas simplement boost? Shared_ptr' en premier lieu? – ereOn

+2

Cause l'interface est indépendante du boost. L'utilisation de boost :: serialization pour sérialiser les classes est juste un détail d'implémentation. Si, plus tard, un autre développeur décide d'utiliser une autre implémentation pour la sérialisation, le projet dépendra toujours du boost. – MOnsDaR

+0

Pourquoi n'utiliser pas simplement 'typedef boost :: shared_ptr MySharedPtr', donc votre code ne dépendrait pas de boost, mais de typedef-dependent. Vous pouvez changer à la fois la bibliothèque de sérialisation et typedefs dans le futur. –

Répondre

3

Un moulage ne sera pas possible car les implémentations diffèrent. La création d'une instance du type shared_ptr avec la valeur renvoyée par get() sur l'autre type shared_ptr ne fonctionnera pas correctement car les comptages de référence iront à 0 à différents points de votre code, ce qui entraînera la suppression de l'objet avant le dernier. utilisation de celui-ci. Je ne suis pas un expert de boost :: serialization mais comme les interfaces de std :: tr1 :: shared_ptr <> et boost :: shared_ptr <> sont presque identiques il est très probable que vous pouvez simplement cloner le code de sérialisation/désérialisation de boost :: shared_ptr <> et il suffit de remplacer l'espace de nom du shared_ptr.