在C++中跨进程边界发送对象的深层副本

Send deep copy of object across process boundary in C++

本文关键字:对象 副本 C++ 进程 边界      更新时间:2023-10-16

>我遇到一种情况,我在C++中有一个类的对象,需要使用 Linux 管道跨进程边界(进程 1 到进程 2)发送该对象。我在网上搜索了如何在C++中进行序列化。我找到了提升,但它需要在课堂上进行一些更改。在我的情况下,我无法改变班级。

此类有很多指针,嵌套继续到 3 个级别(类 1 具有类 2-> 类型的指针 1,类 2 具有类 3 -> 类 3 的指针 2,类 3 具有类 4->类 4 类型的指针 3)。有什么方法可以使用管道发送此对象,以便在第二个进程中重新创建它?

谢谢。

你需要以某种方式序列化类。您的选择究竟如何,但您可以使用JSONXML或您决定的某种二进制格式等格式。如果没有看到有关您课程的更多详细信息,则没有太多要添加的内容。

另一种选择可能是使用共享内存段来存储类,但这会带来指针数学、并发性和其他复杂性的问题。

您是否考虑过 Memento 模式的应用? 您可以创建一个或多个类来处理有关如何序列化对象(文本或二进制)的详细信息。

您创建的用于保存对象的类还将知道如何从您在下一个过程中选择的序列化格式实例化新对象。

你将不得不进行某种序列化,因为你不能跨管道或类似的东西复制构造。如果无法更改类,则唯一的选择是编写一个外部函数或类,该函数或类使用顶级类的公共 API 来获取所有部分并序列化该数据。然后在另一端,你必须从流中重建它。