c++ - 升压:Serialization: Who cleans up the deserialized data?

标签 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?

最佳答案

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

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

关于c++ - 升压:Serialization: Who cleans up the deserialized data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4121822/

相关文章:

c++ - 调用错误和崩溃的纯虚方法

c++ - 序列的递归跟踪输出总和

C++ 网络序列化

c++ - 删除复制赋值运算符的 VS 2015 Update 3 错误

c++ - 带有 g++ 5.4.0 的 asan 无法在 travis CI 上运行

c - 为什么 *str1 和 *(&str1)(str 是 C 中 char 数组的名称)的计算结果不一样?

c - printf() 无格式字符串打印字符和整数数组 --> 垃圾

c - C 中箭头运算符 (->) 的用法

c++ - 无法将对象反序列化为它的类,但只能作为其父类

c++ - 提升 :serialization reconstruction (loading)