我正在序列化对象的原始指针并将其发送到另一个应用程序。
反序列化时我得到另一个原始指针。这意味着 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/