代码之家  ›  专栏  ›  技术社区  ›  MOnsDaR

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

  •  2
  • MOnsDaR  · 技术社区  · 15 年前

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

    反序列化时,我得到了另一个原始指针。这意味着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 回复  |  直到 15 年前
        1
  •  3
  •   icecrime    15 年前

    documentation

    delete_created_pointers

        2
  •  0
  •   Rohan Monga    15 年前
        3
  •  0
  •   user200851    11 年前

    我试过了 demo ,发现有内存泄漏。演示将存档恢复到函数中的对象(在内部使用指针)。当函数返回时,存档被破坏,对象被返回。分配的内存没有被任何人清除。我多次修改了这个演示来运行恢复函数,然后发现这个过程占用了越来越多的内存。因此,如果需要清理分配的内存,可以通过指针手动删除对象,或者调用delete_created_pointers()。