可以发布默认构造的DDS主题类型吗?

时间:2015-01-14 15:52:02

标签: data-distribution-service

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

我正在使用的IDL中有很多联盟,我对此感兴趣可能是相关的。

1 个答案:

答案 0 :(得分:0)

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

的以下内容
  

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

因此,构建默认的初始化主题实例并在线路上发送它是不安全的。

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

  

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

相关问题