Mam złożoną sieć obiektów połączonych z QSharedPointers i QWeakPointers. Czy istnieje prosty sposób na zapisanie/załadowanie ich za pomocą funkcji Boost.Serialization? Do tej pory mam to:Jak serializować współdzielone/słabe wskaźniki?
namespace boost {
namespace serialization {
template<class Archive, class T>
void save(Archive& ar, QSharedPointer<T> const& ptr, unsigned version) {
T* sharedPointer = ptr.data();
ar & BOOST_SERIALIZATION_NVP(sharedPointer);
}
template<class Archive, class T>
void load(Archive& ar, QSharedPointer<T>& ptr, unsigned version) {
T* sharedPointer = 0;
ar & BOOST_SERIALIZATION_NVP(sharedPointer);
ptr = QSharedPointer<T>(sharedPointer);
}
template<class Archive, class T>
void save(Archive& ar, QWeakPointer<T> const& ptr, unsigned version) {
T* weakPointer = ptr.toStrongRef().data();
ar & BOOST_SERIALIZATION_NVP(weakPointer);
}
template<class Archive, class T>
void load(Archive& ar, QWeakPointer<T>& ptr, unsigned version) {
T* weakPointer = 0;
ar & BOOST_SERIALIZATION_NVP(weakPointer);
ptr = QSharedPointer<T>(weakPointer);
}
}
}
To nie działa, ponieważ wspólne wskaźniki są zawsze wykonane z surowych wskaźników więc wszyscy myślą, hrabia odniesienia 1. Jest również natychmiast uwalnia słabe wskaźniki.
Z pewnym wysiłkiem mogę przekonwertować klasy, aby używać boost::shared_ptr
i boost::weak_ptr
. Czy to przyniesie coś dobrego?
Myślę, że drugie rozwiązanie powinno zadziałać dla mnie, dziękuję. – stribika