【问题标题】:Boost 1.65.1 serialization to vector fails with 'Assertion initialized_ failed'Boost 1.65.1 序列化到向量失败,并出现“Assertion initialized_ failed”
【发布时间】:2020-01-19 07:41:21
【问题描述】:

我有以下将 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();

}

编辑:我简化了测试用例。

【问题讨论】:

    标签: c++ serialization boost boost-serialization


    【解决方案1】:

    应该在关闭流之前调用存档的析构函数,因为它将任何更改的流方面恢复到存档打开之前的状态。

    【讨论】:

      【解决方案2】:

      好的,我想通了。 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; 
          }
      
      }
      

      【讨论】:

      • flush 和 close 现在是多余的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      相关资源
      最近更新 更多