指针向量。BOOST序列化

Joa*_*les 3 c++ boost boost-serialization

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

std :: vector <A*> m_vector; 
Run Code Online (Sandbox Code Playgroud)

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

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

并反序列化:

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 Code Online (Sandbox Code Playgroud)

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

Run-Time Check Failure # 3 - The variable 'pItem' is Being Used without Being initialized. 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

谢谢你。

Att*_*ila 5

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

A* pItem = new A;
ar & *pItem;
m_vector.push_back(pItem);
Run Code Online (Sandbox Code Playgroud)

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

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

  • @JoanCarles - 如果它帮助您解决问题,请接受答案 (2认同)