Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在反序列化过程中如何合理地分配内存?_C++_Memory_Serialization_Deserialization - Fatal编程技术网

C++ 在反序列化过程中如何合理地分配内存?

C++ 在反序列化过程中如何合理地分配内存?,c++,memory,serialization,deserialization,C++,Memory,Serialization,Deserialization,我目前正试图在C++中创建一个序列化系统。序列化的初始操作非常简单,反序列化的大部分操作也是如此。在反序列化对象树时,我遇到了创建尚不存在的对象的一大障碍。当然,对于自动/堆栈分配的对象来说,这不是问题。如果对象对内存本身没有期望,那么使用new操作符也是非常简单的 我遇到的问题是,如果对对象所属的内存有明确的期望,该怎么办?例如,如果对象属于内存池怎么办?我需要以某种方式将其传递给序列化系统,并将其放入处理逻辑中 我曾想过使用注册来做这些事情,但这是一件非常非常容易过度设计的事情,我想避免这种

我目前正试图在C++中创建一个序列化系统。序列化的初始操作非常简单,反序列化的大部分操作也是如此。在反序列化对象树时,我遇到了创建尚不存在的对象的一大障碍。当然,对于自动/堆栈分配的对象来说,这不是问题。如果对象对内存本身没有期望,那么使用new操作符也是非常简单的

我遇到的问题是,如果对对象所属的内存有明确的期望,该怎么办?例如,如果对象属于内存池怎么办?我需要以某种方式将其传递给序列化系统,并将其放入处理逻辑中


我曾想过使用注册来做这些事情,但这是一件非常非常容易过度设计的事情,我想避免这种情况。有没有我错过的共同解决方案?如果没有,并且问题/决策空间已知,那么是什么?如果连这一点都不知道,我们将非常感谢您的指导。关于内存分配和反序列化之间重叠的资源似乎有点稀缺。

C库通常提供一种方法来传递自定义的alloc和free函数。C++方式可能是通过一个分配器对象,像标准的CONTANTES一样。我希望反序列化返回的是用<代码>新< /C> >实例化的东西,或者取决于可用的容器,一些其他类型的结构,可以廉价地绕过。例如,如果反序列化一棵树,它将返回一个指向已分配根节点的指针。这实际上是一个很难解决的问题。分配器的通用方法可能会有问题。例如,请参阅删除
std::function
的分配器支持。在有限的情况下,您可能会成功,但除此之外的泛化可能很难实现。之后,树的析构函数负责在我处理完它后处理清理。创建一个通用的反序列化程序,它可以处理许多结构几乎是不可能的。因为没有人说一种类型在整个结构中以相同的方式分配。可以有
new
、placement
new
、pooling和不同的池等组合。在编写反序列化程序时,通常会限制场景。您可以允许用户为特定类型定义反序列化/序列化函数(如Dos),但这仍然是有限的。C库通常提供一种传入自定义alloc和free函数的方法。C++方式可能是通过一个分配器对象,像标准的CONTANTES一样。我希望反序列化返回的是用<代码>新< /C> >实例化的东西,或者取决于可用的容器,一些其他类型的结构,可以廉价地绕过。例如,如果反序列化一棵树,它将返回一个指向已分配根节点的指针。这实际上是一个很难解决的问题。分配器的通用方法可能会有问题。例如,请参阅删除
std::function
的分配器支持。在有限的情况下,您可能会成功,但除此之外的泛化可能很难实现。之后,树的析构函数负责在我处理完它后处理清理。创建一个通用的反序列化程序,它可以处理许多结构几乎是不可能的。因为没有人说一种类型在整个结构中以相同的方式分配。可以有
new
、placement
new
、pooling和不同的池等组合。在编写反序列化程序时,通常会限制场景。您可以允许用户为特定类型定义反序列化/序列化的函数(就像这样),但这仍然是有限的。