2

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

反序列化时,我得到了另一个原始指针。这意味着 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?
4

3 回答 3

3

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

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

于 2010-11-08T07:59:06.480 回答
0

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

于 2010-11-08T07:43:07.783 回答
0

很抱歉回答这个老问题。我尝试了演示,发现它有内存泄漏。该演示将存档恢复到函数中的对象(内部使用指针)。当函数返回并返回对象时,档案被破坏。分配的内存没有被任何人清理。我修改demo多次运行restore功能,发现进程占用内存越来越大。所以如果需要清理分配的内存,可以通过指针手动删除对象,或者调用delete_created_pointers()。

于 2015-06-19T06:14:28.070 回答