1

我正在使用带有 C++(C++11 绑定)的 OpenSplice DDS 6.4 OSS 版本。如果我尝试默认构造一个主题实例并发送它,也许会修改它的一些字段,我会在作者内心的某个地方得到访问冲突异常。这是一个错误,还是默认构造对象无效的预期行为?

我正在使用的 IDL 中有很多工会,我觉得这可能是相关的。

4

1 回答 1

0

IDL 到 C++语言的映射说明了联合的默认初始化

默认联合构造函数不执行联合的应用程序可见初始化。它不会初始化鉴别器,也不会将任何联合成员初始化为对应用程序有用的状态。(默认构造函数的实现可以做它想做的任何类型的初始化,但是这种初始化是依赖于实现的。没有一个兼容的应用程序可以指望一个联合体被默认构造函数单独正确初始化。)

因此,构造一个默认初始化的主题实例并将其在线发送是不安全的。

作为参考,IDL 到 C++11语言的映射说明如下

默认联合构造函数初始化联合。如果指定了默认情况,则将联合初始化为此默认情况。如果联合具有隐式默认成员,则将其初始化为该情况。在所有其他情况下,它被初始化为空。默认构造的联合的分配、复制、移动和销毁是安全的。

于 2015-01-16T11:10:05.550 回答