Boost 1.65.1 序列化到 vector 失败并显示 'Assertion initialized_ failed'
Boost 1.65.1 serialization to vector fails with 'Assertion initialized_ failed'
我有以下将 int 序列化为 std:vector
的测试用例。
它因以下断言而崩溃:
serialization_test: /usr/include/boost/iostreams/detail/optional.hpp:55: T& boost::iostreams::detail::optional<T>::operator*() [with T = boost::iostreams::detail::concept_adapter<boost::iostreams::back_insert_device<std::vector<char> > >]: Assertion `initialized_' failed.
有什么想法吗?我认为这应该可行...
BOOST_AUTO_TEST_CASE(serialize_base_test)
{
int t = 42;
std::vector<char> buffer;
iostreams::back_insert_device<std::vector<char>> sink{buffer};
iostreams::stream<iostreams::back_insert_device<std::vector<char>>> os;
os.open(sink);
archive::binary_oarchive oa(os);
oa << t;
os.flush();
os.close();
}
编辑:我简化了测试用例。
好的,我明白了。 binary_oarchive
在其析构函数中做了一些事情,要求流仍然打开。
以下作品:
BOOST_AUTO_TEST_CASE(serialize_base_test)
{
int t = 42;
std::vector<char> buffer;
iostreams::back_insert_device<std::vector<char>> sink{buffer};
iostreams::stream<iostreams::back_insert_device<std::vector<char>>> os;
os.open(sink);
{
archive::binary_oarchive oa(os);
oa << t;
}
}
应在关闭流之前调用存档的析构函数,因为它会将任何已更改的流方面恢复到打开存档之前的状态。
我有以下将 int 序列化为 std:vector
的测试用例。
它因以下断言而崩溃:
serialization_test: /usr/include/boost/iostreams/detail/optional.hpp:55: T& boost::iostreams::detail::optional<T>::operator*() [with T = boost::iostreams::detail::concept_adapter<boost::iostreams::back_insert_device<std::vector<char> > >]: Assertion `initialized_' failed.
有什么想法吗?我认为这应该可行...
BOOST_AUTO_TEST_CASE(serialize_base_test)
{
int t = 42;
std::vector<char> buffer;
iostreams::back_insert_device<std::vector<char>> sink{buffer};
iostreams::stream<iostreams::back_insert_device<std::vector<char>>> os;
os.open(sink);
archive::binary_oarchive oa(os);
oa << t;
os.flush();
os.close();
}
编辑:我简化了测试用例。
好的,我明白了。 binary_oarchive
在其析构函数中做了一些事情,要求流仍然打开。
以下作品:
BOOST_AUTO_TEST_CASE(serialize_base_test)
{
int t = 42;
std::vector<char> buffer;
iostreams::back_insert_device<std::vector<char>> sink{buffer};
iostreams::stream<iostreams::back_insert_device<std::vector<char>>> os;
os.open(sink);
{
archive::binary_oarchive oa(os);
oa << t;
}
}
应在关闭流之前调用存档的析构函数,因为它会将任何已更改的流方面恢复到打开存档之前的状态。