0
我想在boost :: serialization中使用boost :: multi_index_container。但是,當我使用指針作爲元素和non_unique順序時,我得到加載序列化容器的內存訪問衝突。我覺得有趣的是,對於唯一排序或使用對象而不是指針作爲容器元素,錯誤不會發生。boost multi_index_container序列化
有人可以告訴我,如果我的代碼存在問題,或者這是否是boost庫中的錯誤?
這裏是產生所描述的誤差最小的例如:
#include <boost/multi_index_container.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/set.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/member.hpp>
#include <fstream>
using namespace std;
using namespace boost::multi_index;
struct element {
friend class boost::serialization::access;
std::string member1;
element(int num) { member1 = boost::lexical_cast<string>(num); }
element() {}
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & member1;
}
};
int main(int argc, const char *argv[])
{
typedef multi_index_container<element *, indexed_by<ordered_non_unique<member<element, std::string, &element::member1>>>> TestSet;
TestSet myset;
srand(time (NULL));
for (int i = 0; i < 20; i++) {
myset.insert(new element(rand()));
}
// Write set
ofstream os("test.bin");
boost::archive::binary_oarchive boa(os);
boa << myset;
os.close();
// Read set
TestSet newset;
ifstream is("test.bin");
boost::archive::binary_iarchive bia(is);
bia >> newset;
return 0;
}
謝謝,這是問題! – Martin 2013-03-20 19:36:22