У меня есть сложная сеть объектов, связанных с QSharedPointers и QWeakPointers. Есть ли простой способ сохранить/загрузить их с помощью Boost.Serialization? До сих пор у меня есть это:Как сериализовать общие/слабые указатели?
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);
}
}
}
Это не работает, потому что общие указатели всегда строится из сырых указателей, так что все они думают, что счетчик ссылок равен 1. Это также немедленно освобождает слабые указатели.
С некоторыми усилиями я могу преобразовать классы для использования boost::shared_ptr
и boost::weak_ptr
. Будет ли это хорошо?
Я думаю, что второе решение должно работать для меня, спасибо. – stribika