提升:序列化:谁清理反序列化的数据?

时间:2010-11-08 06:54:33

标签: c++ pointers boost-serialization

我正在序列化并将对象的原始指针发送到另一个应用程序。

反序列化时,我得到另一个原始指针。这意味着Boost :: Serialization在内部构造此指针后面的对象。我现在好奇谁拥有该对象的所有权,如果Boost将删除该对象,如果不再需要它。

一些代码可能更好地显示问题所在:

void anyMethod()
{
    std::ifstream file("archiv.txt"); 
    boost::archive::text_iarchive ia(file); 
    AnyClass* object; 
    ia >> object; 
    //work with object
}

//Now what has happened to object?
//Is it deleted, cause it went out of scope?
//Do I have to delete it myself?

3 个答案:

答案 0 :(得分:3)

我对关于指针序列化的documentation的理解是所有权由存档保存:“多次加载相同的指针对象导致只创建一个对象,从而复制原始指针配置”。这往往表明图书馆处理簿记。

此外,存档提供了delete_created_pointers方法:“删除通过加载指针创建的所有对象。这可以用于避免在加载指针并且存档加载遇到的情况下可能发生的内存泄漏异常”。

答案 1 :(得分:0)

我不明白为什么AnyClass* object;在这种情况下是合法的,IMO你必须有AnyClass的对象(看http://en.highscore.de/cpp/boost/serialization.html)然后反复使用它。现在,当这个对象(不是指针)超出范围时,它将被删除。

答案 2 :(得分:0)

很抱歉回答这个老问题。 我尝试了demo,发现它有内存泄漏。该演示将归档文件还原到函数中的对象(内部使用指针)。返回函数时将销毁存档,并返回该对象。任何人都不会清理分配的内存。我修改了演示以多次运行恢复功能,然后发现该进程占用了越来越多的内存。因此,如果需要清理已分配的内存,请通过指针手动删除对象,或调用delete_created_pointers()。