繁体   English   中英

Boost 1.65.1序列化到向量失败,并带有“断言Initialized_失败”

[英]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; 
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM