c++ - 指针 vector 。 BOOST序列化

标签 c++ boost boost-serialization

我想使用 BOOST 序列化/反序列化以下 vector 中对象的值(不是指针):

std :: vector <A*> m_vector; 

为了序列化,我使用以下代码:

int nItems = m_vector.size();
ar & nItems;
std::for_each(m_vector.begin(), m_vector.end(), [&ar](A* pItem) {
    ar & *pItem;
});

反序列化:

int nItems;
ar & nItems;
for (int i = 0; i < nItems; ++i) {
    A* pItem;
    ar & *pItem;  ///////////// Run-Time Check Failure #3
    m_vector.push_back(pItem);
}

但是当我运行程序时,出现以下错误:

Run-Time Check Failure # 3 - The variable 'pItem' is Being Used without Being initialized. 

我做错了什么?

谢谢。

最佳答案

您需要为 pItem 指向的对象分配内存:

A* pItem = new A;
ar & *pItem;
m_vector.push_back(pItem);

错误是因为虽然你有一个指针,但在指针指向的内存位置没有对象——指针的值是垃圾(未初始化的指针)。

别忘了调用delete当你不再需要 vector 中的指针所指向的对象时,以防止内存泄漏。更好的是,使用智能指针(例如 boost::shared_ptr<> )来确保内存在不再可访问时被释放。

关于c++ - 指针 vector 。 BOOST序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935982/

相关文章:

android - 使用 boost 编译 android 应用程序,未定义对 'mbtowc' 的引用

c++ - 使用自定义模式序列化和使用 Boost 随机访问

c++ - 在 C++ 的继承上下文中按值传递对象

c++ - thread_group 中的一个线程没有被中断

c++ - 尝试转发声明时 '->' 是什么意思?

c++ - 创建 scoped_lock 最多 200 毫秒

json - boost::ptree 找到了吗?或者如何访问深层数组? C++

c++ - 使用 boost::asio::ip::tcp::iostream 的低带宽性能

c++ - 使用filestream实现高分

c++ - _mm_fmadd_pd 程序收到信号 SIGILL,非法指令