我想使用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);

该错误是因为尽管您有一个指针,但是指针所指向的内存位置中没有对象-指针的值是垃圾(未初始化的指针)。

当您不再需要 vector 中指针指向的对象来防止内存泄漏时,请不要忘记调用delete。更好的是,使用智能指针(例如boost::shared_ptr<>)来确保在无法访问内存时将其释放。

07-27 21:06