1

std::shared_ptrのBoost::Serializationスペシャライゼーションが必要です。

私はBoost::Asioを介してオブジェクトを送信するプログラムを作成しており、それらのオブジェクトの多くは内部でshared_ptrsを使用しています。回避策を使用して、参照しているオブジェクトのみをシリアル化することは、非常に不快です。

Boost :: shared_ptrに提供されている実装を見て、自分で作成しようとしていますが、これらのオブジェクトをどのように処理するかについての理解が不足しています。

Boost :: shared_ptrシリアル化で名前空間を変更すると、ポインターをシリアル化できるようになりましたが、逆シリアル化は機能しません。

最後の手段として、オブジェクトにstd :: unique_ptrsを使用するように切り替えることができます(おそらくそうすべきです)。現時点では、オブジェクトを所有しているように見えるためですが、unique_ptrでのみ同じ問題が発生します。

4

2 に答える 2

1

std::shared_ptrあなたはあなたが内部で使うと言います。それで、なぜあなたがboost::shared_ptrそれの代わりに使わないのか、それは完全にサポートされboost::serializationており、同じ機能を持っていstd::shared_ptrますか?

于 2012-10-15T08:07:07.573 に答える
0

これが最善の方法かどうかはわかりませんが、うまくいくようです。

名前空間を変更し、Boost :: shared_ptrスペシャライゼーションからコピーされたshared_ptrスペシャライゼーションヘッダーにこのロードメソッドを追加しました:

template<class Archive, class T>
inline void load(
    Archive & ar,
    std::shared_ptr< T > &t,
    const unsigned int /* file_version */
){
    T * t_ptr;
    ar >> boost::serialization::make_nvp("px", t_ptr);
    t = std::shared_ptr<T>(t_ptr);
}
于 2012-10-15T09:10:53.547 に答える