6
我有一个与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 2009-12-18 23:46:25