Tengo una compleja red de objetos conectados con QSharedPointers y QWeakPointers. ¿Hay una manera simple de guardar/cargarlos con Boost.Serialization? Hasta ahora tengo esto:¿Cómo serializar punteros compartidos/débiles?
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);
}
}
}
Esto no está funcionando debido a que los punteros compartidos siempre se construyen a partir punteros primas por lo que todos piensan que la cuenta de referencia es 1. También libera inmediatamente punteros débiles.
Con un poco de esfuerzo puedo convertir las clases para usar boost::shared_ptr
y boost::weak_ptr
. ¿Eso servirá de algo?
Creo que la segunda solución debería funcionar para mí, gracias. – stribika