我们可以通过 IPC 传递具有动态管理成员的类对象吗?

Can we pass an object of class which has dynamically managed members via IPC?

本文关键字:成员 对象 管理 动态 IPC 可以通过 我们      更新时间:2023-10-16

我有一种情况,我需要通过 IPC 将一个对象(具有指向动态分配对象的指针(从一个进程发送到另一个进程。

该类的蓝图是:

class Example
{
std::string str;
char *cstring;
int value;
};

如您所见,它动态分配了指向映射到该进程的堆区域的数据成员。

如果是静态对象成员,那么它们就会在连续内存分配中映射,我们可以复制该对象,对吧?可能是我错了或错过了什么。

我们可以使用任何 IPC 机制复制整个对象并通过 IPC 发送吗?

希望你们中的任何人都可以分享一些细节,或者通过指出我正确的方向来工作或工作。

谢谢

通常,您需要将其序列化为顺序字节缓冲区,类似于写入或读取文件或通过网络/互联网的方式。有各种库可以帮助您解决此问题,无论是二进制格式,还是 JSON 或 XML 等结构化文本。有些可能会生成样板代码,以便与结构或类进行转换。

如果您在同一虚拟地址使用共享内存,则可以利用自定义分配器来确保 STL 类型和其他东西也将所有内容存储在共享内存中。我不确定该标准是否对标准定义的对象使用共享内存在技术上是合规的。我希望stringvector等工作,而像mutexfstream等这样的东西则不会。