在另一个进程提供的指针上使用 typeid 是否安全,该进程由同一编译器编译

Is typeid safe being used on pointer provided by another process, which is compiled by the same compiler?

本文关键字:进程 安全 编译 编译器 是否 另一个 指针 typeid      更新时间:2023-10-16

根据标准,typeid 运算符是依赖于实现的,因此在由不同编译器编译的其他进程创建的对象上使用它是无稽之谈。但是,提供过程由同一编译器编译的情况是什么?

它可能无法正常工作,因为异物将在其自己的进程空间内包含一个 vtable 指针,而不是检查进程的空间。如果您可以形成一个地址空间,其中两个可执行二进制映像都就位,就好像它们是正在运行的一样,那么也许。如果它是使用相同命令行标志的同一编译器的相同版本,或者如果您的平台 ABI 准确指定了typeid运行时的工作方式,那么您可能没问题。

但严格来说,C++对象模型不容纳共享内存。您需要在进程之间传输之前进行序列化,并且无法安全地序列化接收端可能不存在的C++类型。