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